意图开始导航活动
在我的应用程序中,我有一个选项来开始导航到选定的兴趣点。基本上我想要的是从我的应用程序启动一个turn-by-turn导航器。事情是我不知道哪个(如果有的话)导航器被安装。意图开始导航活动
因此,问题是如何通过首先显示一个适合用户导航的活动列表来启动一个意图,让他选择他想要使用哪一个?也很好找到一种方法来传递额外的参数到选定的活动(这听起来像是一个问题,因为不同的导航应用程序使用不同的名称为他们的额外,我猜)。
如果不明确:我正在寻找一种方法来显示一个合适的导航应用程序列表,可以选择一个默认值。
编辑:这里找到实现http://datamoil.blogspot.com/2011/04/android-universal-intent-to-start.html
坏消息是,没有导航标准的意图URI。
是的,存在google.navigation URIs,应用程序可能会选择支持它。
我能想到的最好的办法是:
- 明确检查已知应用
- 隐式检查应用程序挂接google.navigation:和也许地理:(但你还可以获得地图应用程序)
可以使用枚举的可能隐含的目标PackageManage.queryIntentActivities
尝试:
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=New+York+NY"));
startActivity(intent);
感谢您的努力,这不是我要找的。谷歌导航只在美国工作,并不一定是首选的导航应用程序。我想我的问题很清楚,我正在寻找一种方法来显示适用于导航的适用应用程序列表。 – 2011-04-27 09:37:09
这一切都取决于导航应用正在使用哪种意图过滤器。 AFAIK没有针对导航意图的特定CATEGORY。我手机上的导航应用程序可以捕获我刚发布的目标。所以当我打电话时,我会看到不同应用程序的列表,而不仅仅是谷歌浏览。 – pumpkee 2011-04-27 10:09:31
每个智能导航应用程序都应该为此目的进行注册,因为当您选择一个地址并点击导航时,它会映射电话。 – pumpkee 2011-04-27 10:26:14
首先我在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>
这将打开任何导航应用你的手机有诸如VZ Navigagtor,谷歌或任何手机正在装载。第一次完美地为我工作。希望这能解决你的问题。
上面的答案也是一样的。它不适合我。阅读评论androidika的答案。 – 2012-03-26 19:07:49
这个清单代码如何与答案相关? – 2014-05-27 11:31:07
我发现使用此代码更具优势(只是为了显示可用的导航应用程序)
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...
}
不幸的是,你是对的。我遵循你的建议并实施它。这不是最优雅的解决方案,但它的工作原理与我所期望的几乎完全相同。 – 2011-04-29 13:00:47