You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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最方便,跨平台还省心:

  1. 先给项目安装Xamarin.Essentials NuGet包
  2. 写个异步方法获取位置:
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;
}
  1. 生成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对权限管得严,必须先申请权限才能获取位置:

  1. 在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" />
  1. 在代码中请求权限:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:30