Android Intent to Google Maps Navigation using Google Place id (not by Coordinates or Address)
Posted
技术标签:
【中文标题】Android Intent to Google Maps Navigation using Google Place id (not by Coordinates or Address)【英文标题】: 【发布时间】:2020-08-12 12:00:03 【问题描述】:来自谷歌, https://developers.google.com/maps/documentation/urls/android-intents#launch_turn-by-turn_navigation,
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
我可以在导航模式下成功打开谷歌地图,但是,由于在我的应用程序的上一页中,我使用了谷歌自动完成功能并获得了Place
。每个地方都有placeId
。问题是如何使用上述逐向导航方法但使用placeId
而不是地址或坐标(因为placeId比其他更准确)。
【问题讨论】:
我认为documentation 对此非常清楚:q
:设置导航搜索的终点。该值可以是纬度、经度坐标或查询格式的地址。也就是说,我不明白为什么到地点 id 的路线会有所不同或不太准确,或者如果您使用地点坐标的话。跨度>
我也相信它不应该有所不同。但事实是,经过大量测试后,它会到达不正确的建筑物/位置。错误率相当高。所以我提出了这个问题。
那你为什么不分享一个例子呢?
如果您需要在当前位置和目的地之间绘制路径或方向,请参阅带有 placeId 的 uri API(我不使用逐向导航):Intent intent = new Intent(Intent. ACTION_VIEW); intent.setData(Uri.parse("google.com/maps/dir/…)); startActivity(intent);
我的客户想直接打开导航
【参考方案1】:
取自docs:
如您在第一行中所见,api 端点有两个参数 - query
和 query_place_id
。 query
如果您有地点 id,则不需要准确,因为地点 id 要准确得多,所以您可以看到我只是输入了一个填充字符串(api 中仍然需要该参数)。在端点中添加您的地点 ID 并设置如图所示的意图,这是在 Android 手机上打开 Google 地图导航的正确意图。
Uri gmmIntentUri = Uri.parse("https://www.google.com/maps/search/?api=1&query=qwerty&query_place_id=" + loc_id);
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
【讨论】:
【参考方案2】:似乎不可能直接使用placeId
int turn-by-tyrn 导航意图,但无论如何你可以将Place
的坐标传递给导航:
Place place = PlaceAutocomplete.getPlace(this, data);
if (place != null)
LatLng latLng = place.getLatLng();
String strLatitude = String.valueOf(latLng.latitude);
String strLongitude = String.valueOf(latLng.longitude);
Uri gmmIntentUri = Uri.parse(String.format("google.navigation:q=%s,%s",strLatitude, strLongitude));
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent)
【讨论】:
导航正确率只有70%,所以需要使用placeId以上是关于Android Intent to Google Maps Navigation using Google Place id (not by Coordinates or Address)的主要内容,如果未能解决你的问题,请参考以下文章
Android 项目开发填坑记 - No Activity found to handle Intent-forms.gle
未找到处理 Intent 的活动 act=android.intent.action.VIEW dat=google.navigation:q=17.399986,78.483137 pkg=com
从 Google 地图向带有地理信息的 Android 应用发送 Intent
Android Google Play Intent 引荐来源网址
com.google.android.c2dm.intent.RECEIVE 还在使用吗?
java [Intent Extras to String]转换Intent的Extras为可读的String #Android