2017-11-17 2 views
5

私はXamarinフォーム(クロスプラットフォーム)を使用してアプリケーションを開発しています。アプリからWazeアプリケーションを開き、緯度と経度を渡しています。
これはWazeをとてもうまく開くが、Wazeを開いただけで、渡されたアドレスまたは緯度/経度を見つけようとしなかった。
Wazeディープリンク

どのように私はそれを動作させるためのアイデアですか?

--- EDIT ---
は最後に、それは私が所望の結果を達成するために管理し、@SushiHangoverからのアイデアを使用して、働いていました。最終的なコードはここにある:

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

。たとえば、 "https://waze.com/ul?q=Hawaii"で開くと、Wazeは動作しますか? –

+0

私はまた、アドレスで試して、それは同じ行動をした、ちょうどオープンアプリ、場所を探していない。 –

答えて

4

Android上で直接アプリのリンクは(WazeのiOS版がありません)リンクプロパティ/オプションを尊重し、これを適切に深いとのWazeを開くために、ウェブベースURL(https://waze.com)を使用していませんリンクオプション。

例:

`client.Latitude`とは`良好な値を返すLongitude`と仮定して、正しい方法のように見えます
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

httpsを使用すると、ブラウザではなく、アプリケーションが起動されます...私はもう一度やり直してみますが、少なくとも私にとってはアプリを開くことができませんでした。 –

+0

Wazeとhttpsは深いリンクをサポートしているので、ユーザがブラウザを選択するとブラウザが開き、Wazeがブラウザを開き、Wazeがユーザにアプリを送り返します。 – SushiHangover

+0

良い!私はここで試していますが、 "var resolveInfo = PackageManager.ResolveActivity(intent、0);"というエラーが表示されています。この部分は何についてですか? –