【发布时间】:2019-09-03 14:51:47
【问题描述】:
在我的应用中,我有一个按钮,可以打开带有已发送坐标的 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);
}
});
这工作正常,但我想在点击按钮后向用户提供他设备中的所有导航应用程序。
所以不要自动打开谷歌地图,而是让用户选择使用哪个应用。
我找到了this solution,但这仅适用于 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);
那么有什么解决方案可以提供用户拥有的所有导航应用程序吗?
例如分享功能是这样的:
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)));
这将显示许多具有共享可能性的应用程序。如何为带有地图的应用程序做同样的事情?
编辑:我将此添加到 google 和 waze 代码中,所以现在我已在选择器中列出:Google 地图、Waze 和一个未知的 android 图标,当我点击它时,它会显示我设备上的所有导航应用程序!但是,只有当我单击那个未命名的图标并且它只会打开那些没有导航的地图。
String urlx = "geo:" + gps1 + ", " + gps2;
Intent intentOther = new Intent(Intent.ACTION_VIEW, Uri.parse(urlx));
我需要在点击按钮后立即显示所有这些应用程序。
【问题讨论】:
-
你试过
geo:common intent吗? -
woohoo,我之前尝试过 geo,但同时使用了 google 和 waze。现在我只尝试了 geo,如下所示: String urlx = "geo:" + gps1 + ", " + gps2; Intent 意图 = new Intent(Intent.ACTION_VIEW);这真的向我展示了所有的导航应用程序!这很好,但问题是,它只显示地图上的点,而不是导航路径。我对谷歌和 waze 的原始解决方案还显示了导航路径,地理仅显示点(根据坐标)。所以这是一个非常好的方法,只是为了找到导航路线的解决方案