2017-11-17 97 views
5

Pracuję nad aplikacją przy użyciu Xamarin Forms (platforma krzyżowa) i próbuję otworzyć aplikację Waze z mojej aplikacji, przekazując szerokość i długość geograficzną.
Otwiera Waze bardzo dobrze, ale Waze po prostu otwiera się, nie próbował znaleźć adresu ani długości/szerokości geograficznej, którą minąłem.
Waze Deep Links

Kilka pomysłów na to, jak to działa?

--- EDIT ---
Wreszcie to zadziałało, używając pojęcia z @SushiHangover, udało mi się osiągnąć pożądany rezultat. Ostateczny kod jest tutaj:

public static Task<bool> OpenWazeAndroid(decimal latitude, decimal longitude, string address) 
     { 
      if (IsAndroid()) 
      { 
       try 
       { 
        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); 
       } 
       catch (Exception ex) 
       { 
        App.Shell.Alert("Erro ao abrir o Waze.\n" + ex.Message); 
        return Task.FromResult(false); 
       } 

      } 
      return Task.FromResult(false); 
     } 
+0

To wygląda prawidłowy sposób, zakładając, że '' Longitude' client.Latitude' i powrót dobrych wartości. Czy Waze zachowuje się, jeśli otworzysz, na przykład "https://waze.com/ul?q=Hawaii"? –

+0

Próbowałem również z adresami, miało to samo zachowanie, po prostu otwórz aplikację, nie szukając miejsca. –

Odpowiedz

4

Link aplikacja na Androida nie przestrzega odnośnik Properties/opcje (Waze iOS robi), więc używać podstawowego adresu URL WWW (https://waze.com), aby prawidłowo otwarty Waze z głębin opcje linków.

Przykład:

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); 
+0

Jeśli korzystasz z https, to otwiera przeglądarkę, a nie aplikację ... Spróbuję jeszcze raz, ale przynajmniej dla mnie nie było otwierać aplikacji –

+0

Waze rejestruje Waze i https, ponieważ obsługuje głębokie linki, IF użytkownik wybiera przeglądarkę a aplikację Waze, a następnie otwiera przeglądarkę, przechodzi do Waze, gdzie użytkownik jest odsyłany z powrotem do aplikacji. – SushiHangover

+0

Dobrze! Próbuję tutaj, ale pokazuje błąd w "var resolveInfo = PackageManager.ResolveActivity (intent, 0);" o czym jest ta część? –