如何提示用户选择默认导航应用程序

时间:2016-04-27 19:31:30

标签: android google-maps android-intent

我有一个应用程序让用户点击地址从当前位置开始导航。现在它打开Waze。但现在我想让用户在地图,waze和其他安装的导航应用程序之间进行选择并制作一个默认设置。

我尝试使用:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format(Locale.US, "geo:%.8f,%.8f", latitude, longitude)));
startActivity(Intent.createChooser(intent, "Select an application"));

它让我选择,但它不会启动导航,只是地图上的一个经典点。我想要的是打开任何应用程序的导航。 对于地图它是:

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

但它不会让用户使用哪个应用程序。

那么有没有办法自动完成?如果没有,可以让用户选择什么?

1 个答案:

答案 0 :(得分:0)

执行intent.setPackage("com.google.android.apps.maps");您强制使用Google地图。来自the documentation

  

public Intent setPackage(String packageName)

     

(通常是可选的)设置显式应用程序包名称,以限制此Intent将解析的组件。如果保留默认值null,则将考虑所有应用程序中的所有组件。如果为非null,则Intent只能匹配给定应用程序包中的组件。

删除它:

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
startActivity(mapIntent);

<强>更新

似乎Waze响应http://maps.google.com意图,因此您可以通过这种方式实现所需的功能(对iCoyote不起作用):

Uri gmmIntentUri = Uri.parse("http://maps.google.com/maps?q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
startActivity(mapIntent);