【问题标题】:Waze Deep Links位智深层链接
【发布时间】:2018-05-01 16:13:17
【问题描述】:

我正在使用 Xamarin Forms(跨平台)开发一个应用程序,并且我试图从我的应用程序中打开 Waze 应用程序,并传递纬度和经度。
它可以很好地打开 Waze,但是 Waze 只是打开,它没有尝试找到我经过的地址或纬度/经度。

string stringUri = @"waze://ul?ll=" + client.Latitude + ","  + client.Longitude + "&navigate=yes";
Intent intent = new Intent(Intent.ActionView);
intent.AddFlags(ActivityFlags.NewTask);
intent.SetData(Android.Net.Uri.Parse(stringUri));
Android.App.Application.Context.StartActivity(intent);

关于我如何使它工作的一些想法?

---编辑---
最后,它工作了,使用@SushiHangover 的想法,我设法达到了预期的结果。最终代码在这里:

public static Task < bool > OpenWazeAndroid(decimal latitude, decimal longitude, string address) {
    var lat = latitude.ToString().Replace(",", ".");
    var longi = longitude.ToString().Replace(",", ".");
    const string wazePrefix = "waze://";
    Android.Content.Intent intent = new Android.Content.Intent(Android.Content.Intent.ActionView, Android.Net.Uri.Parse(wazePrefix));
    string wazeURL = ("https://waze.com/ul?q=" + address + "&ll=" + lat + "," + longi + "&z=8&navigate=yes");
    wazeURL = wazeURL.Replace(" ", "%20");
    var resolveInfo = Android.App.Application.Context.PackageManager.ResolveActivi‌​ ty(intent, 0);
    Android.Net.Uri wazeUri;
    if (resolveInfo != null) {
        wazeUri = Android.Net.Uri.Parse(wazeURL);
    } else {
        wazeUri = Android.Net.Uri.Parse("market://details?id=com.waze");
    }
    intent.AddFlags(Android.Content.ActivityFlags.NewTask);
    intent.SetData(wazeUri);
    Android.App.Application.Context.StartActivity(intent);

    return Task.FromResult(true);
}

【问题讨论】:

  • 这看起来是正确的方法,假设 client.LatitudeLongitude 返回好的值。如果您使用例如“waze.com/ul?q=Hawaii”打开,Waze 是否会运行?
  • 我也尝试了地址,它具有相同的行为,只是打开应用程序,而不是寻找地点。

标签: c# android xamarin xamarin.android waze


【解决方案1】:

Android 上的直接应用链接不支持链接属性/选项(Waze iOS 支持),因此请使用网络基础 URL (https://waze.com) 正确打开带有深层链接选项的 Waze。

例子:

const string wazeAppURL = "waze://";
var wazeURL = $"https://waze.com/ul?ll={loc[0]},{loc[1]}&navigate=yes";
var intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(wazeAppURL));
var resolveInfo = PackageManager.ResolveActivity(intent, 0);
var wazeUri = resolveInfo != null ? Android.Net.Uri.Parse(wazeURL) : Android.Net.Uri.Parse("market://details?id=com.waze");
intent.SetData(wazeUri);
StartActivity(intent);

【讨论】:

  • 如果使用 https,它会打开浏览器,而不是应用程序...我会再试一次,但至少对我来说,它无法打开应用程序
  • Waze 注册 Waze 和 https,因为它支持深度链接,如果用户选择浏览器与 Waze 应用程序,然后浏览器打开,转到 Waze,用户被发送回应用程序。跨度>
  • 好!我在这里尝试,但它在“var resolveInfo = PackageManager.ResolveActivity(intent, 0);”中显示错误这部分是关于什么的?
  • 我需要这个函数来在一个静态类中打开应用程序(它是一个可以在应用程序的每个部分调用的函数库),并且包管理器是抽象的和非静态的。所以我正在寻找解决这个问题的方法,然后我会检查 waze 是否打开。
  • 我有 xaml.cs 类,即 View (xamarin Forms),当用户使用 android 并选择打开 Waze 时,它​​应该从我的 android 函数库中调用这个函数已创建。整个库是静态的。它向我显示的错误是:“访问非静态字段成员或属性‘PackageManager.ResolveActivity’需要对象引用”
猜你喜欢
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多