意图开始导航活动

在我的应用程序中,我可以select开始导航到选定的兴趣点。 基本上我想要的是从我的应用程序启动一个turn-by-turn导航器。 问题是我不知道哪个(如果有的话)导航器被安装。

所以,问题是如何开始一个意图,首先显示一个适合用户导航的活动列表,让他select他想使用哪一个? 也可以find一个方法来传递额外的参数给选定的活动(这听起来像是一个问题,因为不同的导航应用程序使用不同的名称为他们的额外,我猜)。

如果不清楚:我正在寻找一种方法来显示一个合适的导航应用程序列表,以select一个默认值。

编辑:在这里find执行http://datamoil.blogspot.com/2011/04/android-universal-intent-to-start.html

Solutions Collecting From Web of "意图开始导航活动"

坏消息是,没有用于导航的标准的Intent URI。

是的,google.navigation URI存在,一个应用程序可能会select支持它。

我能想到的最佳解决scheme是:

  • 明确检查已知的应用程序
  • 隐式检查挂钩google.navigation的应用程序: 也许 geo:(但是你也得到地图应用程序)

您可以使用PackageManage.queryIntentActivities枚举可能的隐式目标

尝试:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=New+York+NY")); startActivity(intent); 

首先,我在button的侦听器中使用我的onTap方法:

 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=New+York+NY")); mContext.startActivity(i); 

然后在清单中简单地使用:

 <activity android:name=".LaunchGPS" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

这将打开您的手机有任何Navigator应用程序,如VZ Navigagtor,谷歌或任何手机加载。 第一次完美地为我工作。 希望这可以解决你的问题。

我发现使用这个代码更多的优点(只是为了显示可用的导航器应用程序)

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:")); if (intent.resolveActivity(getActivity().getPackageManager()) != null) { startActivityForResult(Intent.createChooser(intent, "Continues with:", CHOOSE_NAVIGATOR_ID); } else { // Handle failure... }