地理意图标签未显示在Google Maps App中

时间:2019-03-09 14:14:57

标签: java android google-maps kotlin google-maps-markers

自从我的Google Maps应用程序最近更新(现在是 10.11.1版)以来,以下代码未按预期documented和以前的工作方式显示标签:

  val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:38.8951,100.0364?q=38.8951,100.0364(foo)")).setPackage("com.google.android.apps.maps")
  if (intent.resolveActivity(packageManager) == null) {
    intent.setPackage(null)
  }
  startActivity(intent)

此版本也没有({{1}之后紧跟0,0):

geo:

official documentation中的示例代码也没有显示标签:

  val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=38.8951,100.0364(foo)")).setPackage("com.google.android.apps.maps")
  if (intent.resolveActivity(packageManager) == null) {
    intent.setPackage(null)
  }
  startActivity(intent)

no "Google Sydney" label on Moto G5

3 个答案:

答案 0 :(得分:6)

即使使用最新的地图更新10.12.1,也没有解决方案,即使文档仍然说应该 我已经在Google的问题跟踪器上创建了一个问题:https://issuetracker.google.com/issues/129726279

希望我们很快会提供一些信息。

答案 1 :(得分:1)

我今天也遇到了同样的问题。遵循Google的示例无效。看来可行的唯一方法是将经纬度放在geo:之后,而不要放在?q=之后。

我这样做是这样的:

val gUri = Uri.parse("geo:${eventDetails.latitude},${eventDetails.longitude}?q=${Uri.encode(eventDetails.place)}")

就我而言,place不是确切的地址,而只是位置/建筑物的名称。 但是,这可能会引起一些问题。 Google Maps搜索不会将结果标记为带有提供的标签的坐标,而是会将结果偏向提供的区域,并且可能会返回多个结果。

例如,如果我放置任何经纬度和“牛津大学”作为地方,则Google Maps会将我带到牛津大学地区,并在其周围放置数十个标记,指向一些大学等。

提供地址而不是地名可以解决多个标记问题,因为Google Maps会将一个放在您想要的位置,并在标签上标明您的地址,并为您提供底页卡片以及相关建议。但是,这不能解决无法将带有标签的标记放在坐标上的问题。

问题是,这是否是错误,没有充分记录的错误,还是阻止人们在地图上放置假/非真实标签的方法。

答案 2 :(得分:-1)

我认为我们在这里做错了。如果我是Google,那么对于允许开发人员发布带有抽象目标标签的路线,我也会感到不安全,我相信他们永远不会打算解决此问题。

我根据Google的新标准推荐以下解决方案。 https://developers.google.com/maps/documentation/urls/android-intents

https://www.google.com/maps/dir/?api=1&destination=LATITUDE,LONGITUDE

如果您最近看过大多数应用程序,包括我自己构建的应用程序,这将使我们能够向用户发布LAT / LONG,并使用内置的Google自己的Address值作为目标标签。

要真正启动Google Maps应用程序,只需启动一个Web Intent,在这种情况下,我将使用应用程序上下文。

    fun startGoogleMaps(context: Context, lat: Double, long: Double) {
        startWebBrowser(
            context,
            Uri.parse("https://www.google.com/maps/dir/?api=1&destination=$lat,$long")
        )
    }

    fun startWebBrowser(context: Context, link: Uri?) {
        if (link != null) {
            val webIntent = Intent(Intent.ACTION_VIEW, link).apply {
                addFlags(FLAG_ACTIVITY_NEW_TASK)
            }
            if (webIntent.resolveActivity(context.packageManager) != null) {
                context.startActivity(webIntent)
            }
        }
    }