【问题标题】:Intent for Google Maps 7.0.0 with locationIntent for Google Maps 7.0.0 with location
【发布时间】:2013-07-09 12:13:51
【问题描述】:

起初我知道StackOverflow上有几个类似的问题。目前,我使用地理方案来处理其他应用程序可以处理的点。

就像Android documentation的例子一样(顺便说一句,它似乎已经过时的RFC了!)我尝试使用这样的东西:

geo:50.95144,6.98725?q=50.95144,6.98725%20(Disneyland)

所以我得到了一个意图选择器,我可以在其中选择一个应用程序,该应用程序向我展示了谷歌地图迪斯尼乐园的情况,上面有一个标记。现在似乎安装了一个更新,删除了该支持。我刚刚收到消息说找不到这个地方。

我试图理解定义“地理”URI 方案的RFC 5870。我不完全明白。根本不可能定义标签是正确的吗?

我现在如何将位置链接到 Google 地图?

【问题讨论】:

  • 顺便说一句,我说的是 Google Maps 7.0.0 (#700002512),我不知道为什么这只是在 Nexus 7 上。
  • 在我的 N4 上使用新的地图应用程序也是如此。他们删除了对确切地理位置的搜索。你只会得到谷歌知道的下一个地址。 :(
  • 它变得更好了:webapp 现在知道像 'Disneyland@50.95144,6.98725) 这样的查询。 Android 应用程序可以在野外共享标记时创建这些查询。但它本身无法解析这些查询.. :(
  • @TheNail 这似乎与所有 Maps 版本 7.0.x 都重装了,我也在 S3、S4 和 HTC 上进行了检查。
  • adb shell am start -a android.intent.action.VIEW -n com.google.android.apps.maps/com.google.android.maps.MapsActivity -d "geo:6.88,79.91?q=6.88,79.91 (foo)" 为我工作。地图 7.2.0 今天更新了。

标签: android google-maps geolocation geo-schema


【解决方案1】:

WhatsApp 的意图是:

开始 u0 {act=android.intent.action.VIEW 猫=[android.intent.category.BROWSABLE] dat=https://maps.google.com/maps?q=loc:lat,lng+(You)&rlz=1Y1TXLS_enDE543DE543 flg=0x3000000 cmp=com.android.browser/.BrowserActivity (有额外)} 从 pid 2115

因此,如果您使用以下意图 URI:

String geoUri = "http://maps.google.com/maps?q=loc:" + lat + "," + lng + " (" + mTitle + ")";

...它应该表现得像 WhatsApp。此外,似乎其他一些地理应用程序也会触发此意图。但它不适用于所有地理应用!

【讨论】:

  • 抱歉,回答迟了……小数点有问题。这个技巧只适用于以点作为小数分隔符的语言环境。对于使用逗号作为小数分隔符的语言环境,点被替换为逗号,这会导致 URL 无效。但是这个错误已在 v7.2 中得到修复,因此它现在应该适用于所有语言环境。
【解决方案2】:

这适用于在我的 Nexus 4 上测试的最新 Google Maps v7.1。

    public static void launchGoogleMaps(Context context, double latitude, double longitude, String label) {
        String format = "geo:0,0?q=" + Double.toString(latitude) + "," + Double.toString(longitude) + "(" + label + ")";
        Uri uri = Uri.parse(format); 
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
}

【讨论】:

  • 看来你是对的,他们修复了那个错误。奇怪的是我用的是 Maps 7.2,而且最少的时候没用。
【解决方案3】:

就像在 Android 文档的示例中一样(顺便说一下,它似乎已经过时了 RFC!)我尝试使用类似这样的东西

文档中的四个示例结构是:

geo:latitude,longitude
geo:latitude,longitude?z=zoom
geo:0,0?q=my+street+address
geo:0,0?q=business+near+city

您会注意到括号中没有一个“标签”,与 Uri 的其余部分用空格分隔。

现在似乎安装了一个更新,删除了该支持

“支持”(如果以前存在的话)是无证的,您不应该依赖它。您还会注意到有许多适用于 Android 的地图应用程序,用户可以选择其中的任何一个作为 geo: Intent - 您是否测试了所有这些以查看您未记录的功能是否有效所有这些?

根本不可能定义标签是正确的吗?

我在该 RFC 中没有看到任何关于括号中标签语法的证据。不过,我同意,这些 IETF RFC 往往难以阅读。

我现在如何将位置链接到 Google 地图?

去掉括号中的标签:

geo:50.95144,6.98725?q=50.95144,6.98725

而且,由于您不再需要 ? 部分,您可以使用:

geo:50.95144,6.98725

如果您真正的问题是“我现在如何将位置链接到 Google 地图并让它显示我自己的标签”,那么您可能做不到。

欢迎您将地图引擎嵌入到您的应用中(例如,Google 的 Maps V2 for Android),在这种情况下,您可以将地图标记为该引擎的 API 限制。我希望任何严肃的映射引擎都支持添加带有某种标签的标记。

【讨论】:

  • AFIK WhatsApp 使用了太多的意图,直接使用指针和标签打开 Google 地图。我可以想象如何强制打开谷歌地图,但我不知道如何强制使用该标签。我更喜欢一些允许例如的语法一个导航软件导航到这一点。
  • @rekire:“WhatsApp 使用了太多的意图,直接通过指针和标签打开 Google 地图”——如果属实,WhatsApp 开发人员讨厌他们的用户,因为并非所有用户都想使用 Google地图,即使设备上安装了 Google 地图。任何明智的开发者都不应“强制打开 Google 地图”。
  • 我完全同意你的看法。我不想将我的应用绑定到 Google 地图。我只是想知道他们如何强制标签工作。
  • @rekire:我假设 WhatsApp 在您的 Nexus 7 上的行为没有改变,这表明他们正在做与您所做的不同的事情。由于 WhatsApp 是一个大品牌,他们可能与 Google 有一些直接联系。可以想象,谷歌告诉他们这个标签的一些未记录的东西允许他们继续使用它,即使你使用的技巧现在可能被破坏了。 WhatsApp 仍然存在风险,因为无法保证 Google 会继续维护 WhatsApp 使用的任何钩子。
  • @rekire 您可以使用以下工具嗅探意图:play.google.com/store/apps/…
猜你喜欢
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2012-08-09
  • 1970-01-01
相关资源
最近更新 更多