2016-02-11 68 views
0

這個問題是在Android的上下文中。 因此根據谷歌的單證,這是我們應該如何將查詢發送到一個地圖應用: https://developer.android.com/guide/components/intents-common.html#MapsUri生成器 - 爲什麼它會刪除部分字符串?

或者換句話說,發送地理位置的URI:0,0 Q =我+街道+地址 時我們希望去我的街道地址

不過,如果我使用這個代碼:

最後絃樂GEO_LOCATION =:;「地理0,0?」

final String QUERY_PARAM =「q」; Uri builtUri = Uri.parse(GEO_LOCATION).buildUpon()。appendQueryParameter(QUERY_PARAM,location).build();

builtUri實際上不會有0,0例如,如果檢出它的字符串值(字符串或調試模式), 的值是geo:?q = ....沒有0,0。

雖然我的地圖應用程序(Google地圖)在沒有0,0的情況下工作得很好,但對於我來說,理解正在發生的事情將會很棒!爲什麼0,0被刪除?任何方式讓我保留它,如果我希望它的意圖發送?

+0

我會看到什麼'Uri.parse( GEO_LOCATION)'看起來像。如果你的'0,0'在那時失去了,我不會感到驚訝。 – CommonsWare

+0

我做到了,實際上它在那時不會迷路。所以我假設appendQueryParameter做到了,我不知道爲什麼 –

回答

1

地理URI並不真正遵循URI語法的完整規則。 geo URIs是「不透明的」,因爲「geo:」之後的所有內容基本上沒有通常的URI規範(可以是任何他們想要的)。在谷歌的情況下,他們選擇使用看起來像查詢字符串的參數,但它們不是URI規範意義上的查詢字符串。我知道,這很奇怪。

如果你想使用盡可能多的「正確」的代碼儘可能不透明地理URI建立一個Android開放的,你可以做這樣的:

float lat = ... 
float lon = ... 
String addr = URLEncoder.encode("my address", "UTF-8"); 
java.net.URI(
    "geo", 
    "" + lat + "," + lon + "?q=" + addr, 
    null); 
+0

嘿道格! Thx爲你抽出時間來回答,但現在我更加困惑大聲笑....你指的是Java的URI這是不同的類Uri(!),我不知道爲什麼? Android的上下文中不是谷歌的Uri更好嗎?另一方面,你來自谷歌!大聲笑哦,男人!任何良好的指導Uri與URI和一些解釋爲什麼0,0消失?它可以影響不同的地圖應用程序嗎? –

+0

我只是使用java的URI作爲工具來構建一個可以傳送給Android的Uri的字符串。 Java URI是實現URI規範的通用工具。 Android的Uri主要用於在ContentProviders中查找項目或在應用程序組件之間傳遞專門的數據。 (這不是一個通用工具)。 Uri並沒有完全實現互聯網普遍接受的URI規範。 –