2016-02-11 33 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规范。 –