适用于 Android Automotive intent 的 Google 地图

免责声明

该产品/功能会发生变化,并且不受任何服务等级协议 (SLA) 或 弃用政策。在未来的版本中,具体实现方式可能会发生变化。

关于本文档随附的示例软件、数据文件和/或源代码: 产品“按原样”提供且 Google 明确声明, 以及所有担保,无论明示、默示、法定或其他,包括但不限于 适销性、针对特定用途的适用性以及不侵犯任何权利的保证, 与此商品有关。


通过 Android Automotive intent,您可以在 Google 地图中启动导航。

如需了解详情,请参阅适用于 Android 的 Google 地图 intent

如需详细了解如何将您的应用部署到搭载以下任一操作系统的车辆中,请执行以下操作: Android Auto 或 Android Automotive OS,请参阅 Android for Cars

概览

本页面介绍了可用于 Google 地图(Android 版)的意图 汽车。有关详细的 Android 开发者文档,请参阅:

intent 请求

要使用 intent 启动 Android Automotive 专用 Google 地图,您必须先 创建一个 Intent 对象,指定其操作、URI 和软件包。

  • 操作。所有 Google 地图意图都称为“查看”操作 ACTION_VIEW

  • URI。Google 地图 intent 使用 URI 编码字符串,指定所需的 以及用于执行操作的一些数据。

  • 软件包。调用 setPackage("com.google.android.apps.maps") 可以确保 Android 版 Google 地图应用处理 Intent 时使用的设备。如果软件包不是 设置,系统将确定哪些应用可以处理 Intent。如果有多个 有可用的应用时,系统可能会询问您要使用哪个应用。

创建 Intent 后,您可以请求系统启动相关的 管理应用。一种常用的方法是将 Intent 传递给 [startActivity()] 方法结合使用。在这个过程中,系统会启动必要的应用 Google 地图,然后启动相应的 Activity

// Create a Uri from an intent string. Use the result to create an Intent.
Uri mapIntentUri =
Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
// Create an Intent from mapIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);

如果系统无法识别可响应 Intent 的应用,您的应用 应用可能会崩溃因此,请先验证接收方应用是否 。

如需验证应用是否可以接收 intent,请调用 针对 [Intent] 对象的 [resolveActivity()] 权限。如果结果为非空, 至少有一个应用能够处理 intent,可以安全调用 [startActivity()]。如果结果为 null,您不应使用该 intent,并且 如果可能,请停用调用 intent 的功能。

if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}

例如,要启动到悉尼塔龙加动物园的精细导航, 可以使用以下代码:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}

URI 编码的查询字符串

传递给 Google 地图 intent 的所有字符串都必须经过 URI 编码。例如: 字符串“1st &西雅图派克”应变为 1st%20%26%20Pike%2C%20Seattle。 字符串中的空格可使用 %20 编码或替换为加号 (+)。

您可以使用 android.net.Uri parse() 方法对字符串进行编码。例如:

Uri mapIntentUri = Uri.parse("google.navigation:q=" + Uri.encode("1st & Pike, Seattle"));

启动精细导航

使用此 Intent 可启动 Google 地图导航及精细导航路线 一个或多个指定的地址或坐标。始终提供路线 距离用户当前位置

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
google.navigation:place=placename

参数

如需启动导航,请将 placeqwaypoints(可选)搭配使用。 如需选择将航点标记为充电站,请参阅向 Google 地图发送电动汽车行程计划

  • q 设置导航搜索的终点。它可以是 纬度/经度或查询格式的地址。如果它是查询字符串, 返回多个结果,系统会选择第一个结果。

  • place 将端点设置为住址或工作地址。指定要导航到的住宅 用户的家庭住址和工作地点导航到用户的工作地点。

  • avoid 用于设置路线应尝试避开的地图项。avoid 是可选项, 可以设置为以下一项或多项:

    • 收费站:t
    • h:高速公路
    • f(轮渡)
  • waypoints 用于指定路线目的地的一个或多个中途地点 q 指定的最终目的地。您可以指定多个航点 使用竖线字符 (|) 分隔地点,例如: Berlin,Germany|Paris,France。您可以根据需要使用任意数量的航点。 航点将按照 。每个航点既可以是地址,也可以是以英文逗号分隔 纬度/经度坐标;还可以设置地址和纬度/经度 坐标。字符串应进行网址转义, 所以像“Berlin,Germany|Paris,France”这样的航点应转换为 Berlin%2CGermany%7CParis%2CFrance

示例

此 intent 将请求精细导航前往塔龙加动物园, 澳大利亚悉尼:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

如果您不想支付通行费或搭乘渡轮,可以请求 会尽量避免以下情况:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

或者,如果您想导航到自己的家,请使用:

Uri mapIntentUri = Uri.parse("google.navigation:place=home");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

要按顺序启动到以下 3 个地址的精细导航, 传递塔龙加动物园作为最终目的地 q,Google 悉尼和悉尼 歌剧院作为航点:

  1. Google 悉尼办事处

  2. 悉尼歌剧院

  3. 澳大利亚悉尼塔龙加动物园

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7CSydney+Opera+House");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

q 类似,您可以用英文逗号分隔各个航点, 纬度和经度,而不是地址。例如,要启动 同时为悉尼歌剧院传递纬度经度,同时进行相同的导航 地址:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7C-33.856159,151.215256");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

向 Google 地图发送电动汽车行程计划

使用此多目的地导航 intent 可将某些目的地指定为 电动汽车 (EV) 充电站。此 intent 会扩展 多航点 intent,可帮助驾驶员维持充足的电动汽车 通过同步充电站信息将电池充电至目的地 电动汽车行程规划应用和 Google 地图之间的关联。

对于充电站,行程 intent:

  • 必须包含名称和纬度
  • 可视需要包含功率输出,用于计算充电时间

Google 会根据充电站名称和经纬度来查找匹配的充电站 充电站位置可显示丰富数据,如连接器 类型、总金额、速度和实时可用性、支持的付款方式 和托管地图注点 (POI)。例如, 在导航的最后一部分、营业时间、 评分。为了确保充电站与 Google 数据高度匹配, 使用 <brand name>,例如 ChargePoint

参数

终点站

如需将某个充电站设置为最终目的地,请使用以下命令:

  • q:必须包含充电站的纬度值。
  • q_type1 指定最终目的地为充电站。
  • q_name:最终目的地的名称。如果 q_type1,则必须提供此值。
  • q_power_output_kw:充电站输出功率的双倍数 千瓦可选。

航点

对于航点,所有参数都是平行的,以 | 分隔的数组 值的顺序与路标顺序相同,但不包括最终目的地。 并行数组中的元素数量不匹配,将被视为 intent 的格式不正确。

如需添加一个或多个充电站航点,请使用以下参数: 所有这些都是可选的如果其中一个目的地被标记为充电站 则航点名称对于该目的地是必需的。

  • waypoints:精细导航中描述的航点列表 intent。必须为充电站航点的纬度值。

  • waypoint_types:每个航点的类型(以数字表示)。 0 为任意充电站(默认值),1 为充电站。

  • waypoint_names:航点名称。在进行充电时必须填写此字段 充电站。

  • waypoint_power_outputs_kw:充电站电源输入的双精度数字 千瓦对于充电站,您可以选择指定航点 功率输出值,用作在匹配充电站 未找到。空槽表示未提供任何值。

用户体验 (UX) 行为

对于包含多个目的地的行程 intent,路线概览屏幕会 但导航不会自动开始。

对于格式正确的 intent,Google 地图将提供路线概览 显示行程界面。路线概览屏幕将显示所有航点和 来自 intent 的最终目的地,具有计费建议, 。

对于任何标记为充电站的航点或最终目的地,Google 地图 将在 Google 数据库中搜索匹配的地点。

找到匹配设备后,Google 地图会使用 Google 数据显示充电数据 并在界面中提供相应充电桩的充电建议 充电站如果未找到匹配,则指定 intent 中提供的数据 充电站(经纬度、名称和功率输出)来显示 并在界面中显示充电站 充电站

示例

经由多个充电站导航到最终目的地

以下 intent 会导航到最终目的地,新南威尔士州麦考利港, 有两个充电站:ChargePoint 和 Evie。

目的地(按顺序排列):

  1. ChargePoint 充电站(位置:-32.9599188,151.6240806,power 输出:6.6 千瓦)

  2. Evie 充电站(位置:-31.9432539,152.4699808,功率输出: 350 千瓦)

  3. 新南威尔士州麦夸里港

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);

输出功率未知

如果功率输出值未知,请留下 waypoint_power_outputs_kw 为空。或者,如果所有槽位均为空,则无需 用于指定 waypoint_power_outputs_kw 参数。

目的地(按顺序排列):

  1. ChargePoint 充电站(位置:-32.9599188,151.6240806,功率输出:未知)

  2. 新南威尔士州麦夸里港

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

将最终目的地标记为充电站

如需将最终目的地标记为充电站,请指定 q_typeq_nameq_power_output_kw 参数。

目的地(按顺序排列):

  1. 澳大利亚悉尼塔龙加动物园

  2. ChargePoint 充电站(位置:-32.9599188,151.6240806,功率输出:未知)

  3. Evie 充电站(位置:-31.9432539,152.4699808,输出功率:350 千瓦)

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=-31.9432539,152.4699808&q_type=1&q_name=Evie+Charging+Station&q_power_output_kw=350"
            + "&waypoints=Taronga+Zoo%2C+Sydney+Australia%7C-32.9599188%2C151.6240806"
            + "&waypoint_types=0%7C1"
            + "&waypoint_names=%7CChargePoint+Charging+Station"
            + "&waypoint_power_outputs_kw=%7C");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);