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

如何在Android Auto/Android Automotive中创建含途经点的Google Maps Intent

Android Auto 中 Google Maps 多途经点导航 Intent 问题解决

问题背景

手机端可正常运行的Google Maps多途经点导航Intent,在Android Auto环境下无法工作。修改代码后虽能唤起Maps,但存在两个核心问题:

  • 仅首次启动Intent有效
  • 途经点被完全忽略

原手机端代码

Uri mapIntentUri =
Uri.parse(
    "google.navigation:q=Port+Macquarie+NSW"
        + "&waypoints=-32.9599188%2C151.6240806%7C-31.9432539%2C152.4699808"
        + "&waypoint_types=1%7C1"
        + "&waypoint_names=ChargePoint+Charging+Station%7CEvie+Charging+Station"
        + "&waypoint_power_outputs_kw=6.6%7C350");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

修改后存在问题的Android Auto代码

val mapUri = Uri.parse(url)
val mapIntent = Intent(Intent.ACTION_VIEW, mapUri)                
mapIntent.setPackage(ExternalMapNavigationOption.GoogleMaps.androidPackageName)
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
carContext.startActivity(mapIntent)

问题修复方案

1. 解决「仅首次启动有效」的问题

你设置的FLAG_ACTIVITY_CLEAR_TASK会清除Google Maps的任务栈,后续启动时因任务栈被清空,Intent无法正确传递至现有Maps实例。移除该标记,仅保留FLAG_ACTIVITY_NEW_TASK,同时添加CATEGORY_LAUNCHER确保Auto环境下正确唤起:

val mapIntent = Intent(Intent.ACTION_VIEW, mapUri)
mapIntent.setPackage("com.google.android.apps.maps")
// 仅保留NEW_TASK标记,避免清除任务栈
mapIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
// 添加分类确保Auto环境识别
mapIntent.addCategory(Intent.CATEGORY_LAUNCHER)
carContext.startActivity(mapIntent)

2. 解决「途经点被忽略」的问题

Android Auto对Google Maps的Intent参数有严格限制,部分手机端支持的扩展参数(如waypoint_types、waypoint_power_outputs_kw)在Auto中不被兼容,需做以下调整:

  • 删除Auto不支持的扩展参数
  • 确保途经点使用|分隔,坐标格式为「纬度,经度」
  • 仅保留Auto明确支持的参数:q(终点)、waypoints(途经点)、waypoint_names(途经点名称)

修正后的Uri构建代码:

// 构建符合Auto要求的导航链接
val targetDestination = "Port+Macquarie+NSW"
val waypoints = "-32.9599188,151.6240806|-31.9432539,152.4699808"
val waypointNames = "ChargePoint+Charging+Station|Evie+Charging+Station"
val mapUrl = "google.navigation:q=$targetDestination&waypoints=$waypoints&waypoint_names=$waypointNames"
val mapUri = Uri.parse(mapUrl)

最终完整可运行代码(Kotlin)

// 1. 构建符合Android Auto要求的导航Uri
val targetDestination = "Port+Macquarie+NSW"
val waypoints = "-32.9599188,151.6240806|-31.9432539,152.4699808"
val waypointNames = "ChargePoint+Charging+Station|Evie+Charging+Station"
val mapUrl = "google.navigation:q=$targetDestination&waypoints=$waypoints&waypoint_names=$waypointNames"
val mapUri = Uri.parse(mapUrl)

// 2. 配置Intent
val mapIntent = Intent(Intent.ACTION_VIEW, mapUri)
mapIntent.setPackage("com.google.android.apps.maps")
mapIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
mapIntent.addCategory(Intent.CATEGORY_LAUNCHER)

// 3. 通过CarContext启动导航
carContext.startActivity(mapIntent)

额外注意事项

  • 确保Google Maps为最新版本,Android Auto处于正常连接状态
  • 应用需申请ACCESS_FINE_LOCATION权限(导航功能依赖位置权限)
  • 若仍有异常,可尝试替换为geo:协议(Auto对该协议兼容性更稳定):
    val geoUrl = "geo:0,0?q=$targetDestination&waypoints=$waypoints"
    val geoUri = Uri.parse(geoUrl)
    

内容的提问来源于stack exchange,提问作者narko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:44:51