2014-09-04 72 views
11

有几个类似的帖子,但我找不到确切的一个。基本上,我想以相同的意图打开Goog​​le地图和Waze。起初,我试过这个:Android意图打开Waze和谷歌地图

final String uri = String.format(Locale.ENGLISH, "geo:%f,%f", latitude, longitude); 
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 
startActivity(intent); 

Waze直接导航到正确的位置和谷歌地图打开正确的地方。那么我意识到Google地图不会在地点上放置一个针,所以用户很难知道它的确切位置。所以,我环顾四周,意识到谷歌地图需要“?Q = ..(标签)”为...我改变了URI建设:

final String uri = String.format(Locale.ENGLISH, "geo:%f,%f?q=%f,%f (%s)", latitude, longitude, latitude, longitude, name); 

但随后的Waze做了两件事情:导航到正确的位置并在标签上运行搜索。这要求用户点击后退按钮关闭搜索结果屏幕,并保持导航到正确的位置。

我到处寻找答案,但没有找到解决方案,将实现两个。 起初我以为这是不可能的,而Waze有一个bug ......但后来我注意到Facebook Messenger正在做我想要的东西。当点击带有位置的邮件时,它将打开两个应用程序:Google地图将有一个别针(带有标签),Waze将直接导航到该位置而不运行搜索。

关于上述问题的几个问题: 1.(当然)我怎样才能做到这一点? 2.我怎么知道Facebook Messenger的意图是如何构建的? (无论如何我可以捕捉它) 3.只有“?q = ..”的标签背后的原因是什么?

谢谢

+0

您可以发布要求用户在Waze和Google Maps之间进行选择的代码吗? – 2015-07-16 23:07:53

回答

16

没关系。我可以用下面的应用程序拦截了Facebook Messenger和盘算了一下,URI应该如下:

String.format(Locale.ENGLISH, "geo:0,0?q=") + android.net.Uri.encode(String.format("%[email protected]%f,%f", label, latitude, longitude), "UTF-8"); 

的应用: https://play.google.com/store/apps/details?id=uk.co.ashtonbrsc.android.intentintercept&feature=search_result#?t=W251bGwsMSwyLDEsInVrLmNvLmFzaHRvbmJyc2MuYW5kcm9pZC5pbnRlbnRpbnRlcmNlcHQiXQ ..

感谢

+0

谢谢 - 帮我解决了这个问题! – Kibi 2014-12-04 11:35:14

+0

这只适用于如果标签保留地址:(只有当你删除标签Waze将导航,只有当你有标签谷歌地图将导航 – bentzy 2015-08-26 14:59:44

+0

Waze正在为我导航的标签。也许你有一个不同的问题.. 。 – 2015-08-27 20:04:42

2

继宁录提示我”已经安装了应用程序并截获了whatsapp的位置功能的意图。以下是在地图上进行完整Intent测试并进行了测试:

String uri = "http://maps.google.com/maps?q=loc:"+latitude+","+longitude+" ("+label+")"; 
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
intent.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); 
intent.setData(Uri.parse(uri)); 
startActivity(intent);