Android 意图选择器 - 导航应用

Dar*_*ony 5 android android-intent

在我的应用程序中,我有一个按钮,可以打开带有发送坐标的 Google 地图。

 final ImageView view = findViewById(R.id.navigate);
        view.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
                        Uri.parse("http://maps.google.com/maps?daddr="+gps1+","+gps2));
                startActivity(intent);
            }
        });
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想在单击按钮后向用户提供他设备中的所有导航应用程序。

所以不是自动打开谷歌地图,而是让用户选择使用哪个应用程序。

我找到了这个解决方案,但这仅适用于 Google 地图和 Waze。由于我不知道用户的设备上有哪些导航应用程序以及多少导航应用程序,因此我无法对所有现有的导航应用程序进行硬编码。

String url = "waze://?ll=" + latitude + ", " + longitude + "&navigate=yes";
Intent intentWaze.setPackage("com.waze");
Intent intentWaze = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

String uriGoogle = "google.navigation:q=" + latitude + "," + longitude;
Intent intentGoogleNav.setPackage("com.google.android.apps.maps");
Intent intentGoogleNav = new Intent(Intent.ACTION_VIEW, Uri.parse(uriGoogle));

String title = context.getString(R.string.title);
Intent chooserIntent = Intent.createChooser(intentGoogleNav, title);
Intent[] arr = new Intent[1];
arr[0] = intentWaze;
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arr);
context.startActivity(chooserIntent);
Run Code Online (Sandbox Code Playgroud)

那么是否有任何解决方案可以提供用户拥有的所有导航应用程序?

例如,对于共享功能,它的工作方式如下:

 Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT,
                        infox);
                sendIntent.setType("text/plain");
                startActivity(Intent.createChooser(sendIntent, getString(R.string.share)));
Run Code Online (Sandbox Code Playgroud)

这将显示许多具有共享可能性的应用程序。如何对带有地图的应用程序执行相同操作?

编辑:我将此添加到 google 和 waze 代码,所以现在我已在选择器中列出:Google 地图、Waze 和一个未知的 android 图标,当我单击它时,它会显示我设备上的所有导航应用程序!但是,只有当我单击那个未命名的图标时,它才会在没有导航的情况下打开那些地图。

 String urlx = "geo:" + gps1 + ", " + gps2;
                Intent intentOther = new Intent(Intent.ACTION_VIEW, Uri.parse(urlx));
Run Code Online (Sandbox Code Playgroud)

单击按钮后,我需要立即显示所有这些应用程序。

Dar*_*ony 2

因此,正如我发现的,没有通用的方法可以在意图选择器中的所有导航应用程序上强制导航路线,所以我像上面提到的那样解决了它,只是我向 geo 添加了一个参数,如下所示:

geo:0,0?q=latitude,longitude
Run Code Online (Sandbox Code Playgroud)

并添加到清单:

  <data android:scheme="geo"/>
Run Code Online (Sandbox Code Playgroud)

这会在选择器中显示我设备上的所有导航应用程序,并且主要显示地图上的点和坐标,但像位智这样的一些应用程序也会立即计算路线,所以我认为这是一个很好的解决方案。