web-dev-qa-db-ja.com

Android WazeマップとGoogleマップの両方を開く意図

同様の投稿がいくつかありますが、正確な投稿は見つかりませんでした。基本的に、GoogleマップとWazeの両方を同じ意図で開きたいです。最初に私はこれを試しました:

final String uri = String.format(Locale.ENGLISH, "geo:%f,%f", latitude, longitude);
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);

Wazeは適切な場所に直接ナビゲートし、Googleマップは適切な場所を開きました。それから私はグーグルマップが場所にピンを置かないので、ユーザーがそれが正確にどこにあるかを知るのが難しいことに気づきました。それで私は周りを見回して、グーグルマップがそのために「?q = ..(label)」を必要とすることに気づきました...私はURI構造を次のように変更しました:

final String uri = String.format(Locale.ENGLISH, "geo:%f,%f?q=%f,%f (%s)", latitude, longitude, latitude, longitude, name);

しかしその後、Wazeは2つのことをしました:正しい場所にナビゲートし、ラベルで検索を実行します。これには、ユーザーが戻るボタンをクリックして検索結果画面を閉じ、適切な場所へのナビゲーションを続行する必要がありました。

私はどこでも答えを探しましたが、両方を達成する解決策を見つけることができませんでした。最初はそれは不可能だと思っていましたが、Wazeにはバグがあります...しかし、Facebookメッセンジャーがまさに私が望んでいることをしていることに気づきました。場所のあるメッセージをクリックすると、両方のアプリが開きます。Googleマップにはピン(ラベル付き)があり、Wazeは検索を実行せずにその場所に直接移動します。

上記についてのいくつかの質問:1。(もちろん)どうすればそれを達成できますか? 2. Facebookメッセンジャーの意図がどのように構築されているかをどのように知ることができますか? (とにかくキャッチできますか)3。「?q = ..」だけのラベルを付ける理由は何ですか?

ありがとう

18
Nimrod Nahum

Nimrodのヒントに従って、アプリをインストールし、whatsappのロケーション機能からインテントを傍受しました。マップとWazeでテストされた完全なインテントは次のとおりです。

String uri = "http://maps.google.com/maps?q=loc:"+latitude+","+longitude+" ("+label+")";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
intent.setData(Uri.parse(uri));
startActivity(intent);
3
Erich Lotto

WazeとGoogleMapの両方のアプリケーションを開いて方向性をつかむための私の最終的な解決策(魅力のように機能します):

 String uri = "";
    Intent intent;
    try {

        uri = String.format(Locale.ENGLISH,"geo:" + location.getLat() + "," +location.getLng() + "?q=" + location.getLat()+","+location.getLng()+" ("+location.getName()+")");
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    } catch (ActivityNotFoundException ex) {
        try {
            Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
            startActivity(unrestrictedIntent);
        } catch (ActivityNotFoundException innerEx) {
            getSnackbar(getResources().getString(R.string.map_install_application), Snackbar.LENGTH_LONG).show();
        }
    }
1