2014-09-04 46 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);