Android中如何显示谷歌地图并展示当前位置到目的地的距离
Android端谷歌地图实现从当前位置到目的地的路线与距离展示
我来帮你搞定Android端谷歌地图的路线展示问题!你现在的Android代码用geo:0,0?q={地址}只能定位到目标地址,没法触发从当前位置到目的地的路线规划,更看不到距离和预计耗时。下面给你一步步解决:
第一步:改用谷歌地图深度链接格式
谷歌地图有官方的路线规划深度链接,比geo:协议功能强太多。格式是这样的:
https://www.google.com/maps/dir/?api=1&origin=<当前位置经纬度>&destination=<目的地地址>&travelmode=driving
几个关键参数说明:
api=1:必须加,指定使用谷歌地图的标准API格式origin:填当前位置的经纬度(比如31.2304,121.4737),显式传经纬度比让地图自动获取更稳定destination:你的目标地址,记得用Uri.EscapeDataString转义特殊字符travelmode:可选,比如driving(驾车)、walking(步行)、transit(公共交通),按需选择
所以Android端的代码可以改成这样:
case Device.Android: // 先拿到当前位置的经纬度,后面会说怎么获取 string origin = $"{CurrentLatitude},{CurrentLongitude}"; string destination = Uri.EscapeDataString(Shop.Address.StreetZipCityString); url = $"https://www.google.com/maps/dir/?api=1&origin={origin}&destination={destination}&travelmode=driving"; break;
第二步:获取当前位置的经纬度
要拿到CurrentLatitude和CurrentLongitude,用Xamarin官方的Xamarin.Essentials最方便,跨平台还省心:
- 先给项目安装Xamarin.Essentials NuGet包
- 写个异步方法获取位置:
using Xamarin.Essentials; async Task<Location> GetCurrentLocationAsync() { try { // 中等精度,10秒超时,平衡精度和速度 var request = new GeolocationRequest(GeolocationAccuracy.Medium, TimeSpan.FromSeconds(10)); var location = await Geolocation.GetLocationAsync(request); if (location != null) { return location; } } catch (FeatureNotSupportedException) { // 设备不支持定位,提示用户 } catch (PermissionException) { // 用户拒绝了定位权限,引导去设置开权限 } catch (Exception) { // 其他定位错误,比如信号差 } return null; }
- 生成URL前调用这个方法:
case Device.Android: var currentLocation = await GetCurrentLocationAsync(); if (currentLocation != null) { string origin = $"{currentLocation.Latitude},{currentLocation.Longitude}"; string destination = Uri.EscapeDataString(Shop.Address.StreetZipCityString); url = $"https://www.google.com/maps/dir/?api=1&origin={origin}&destination={destination}&travelmode=driving"; } else { // 拿不到位置就 fallback 到原来的方案,或者提示用户开启定位 url = string.Format("geo:0,0?q={0}", Uri.EscapeDataString(Shop.Address.StreetZipCityString)); } break;
第三步:别忘了处理定位权限
Android对权限管得严,必须先申请权限才能获取位置:
- 在Android项目的
AndroidManifest.xml里加权限:
<!-- 粗略定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 精确定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 10+ 如果需要后台定位再加这个 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
- 在代码中请求权限:
var permissionStatus = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>(); if (permissionStatus != PermissionStatus.Granted) { permissionStatus = await Permissions.RequestAsync<Permissions.LocationWhenInUse>(); } if (permissionStatus == PermissionStatus.Granted) { // 权限到手,去获取位置生成URL } else { // 权限被拒,提示用户去设置开启 }
这样改完之后,Android端打开谷歌地图就会自动展示从当前位置到目的地的驾车路线,还能看到距离和预计时间。就算用户没装谷歌地图APP,链接也会跳转到网页版谷歌地图,同样能正常显示路线。
内容的提问来源于stack exchange,提问作者user6643951
相关产品推荐
相关产品推荐

