Skip to content

导航指令列表

功能介绍

导航过程中,SDK 在路线引导信息变化时,通过 NavigationEventListener.onTurnByTurnListUpdated 下发机动列表(List<ManeuverInfo>),供 HMI 展示导航指令列表。

导航指令列表展示

列表范围: 不一定是一次性给出起点到终点的全部机动。长距离路线时,可能回调约 50 km 范围内可计算的部分引导(partial guidance),待引导数据补全后再回调完整列表(full guidance)。每次回调仍应从路线起点起按顺序排列,HMI 应以最新一次整表为准刷新 UI。

核心接口:

接口 说明
NavigationEventListener.onTurnByTurnListUpdated(maneuverInfoList) 机动列表推送更新(可能先部分、后完整;必实现)
NavigationSession.getManeuverList() 主动查询;返回上一次 onTurnByTurnListUpdated 缓存的列表

导航状态信息 的区别:

回调 频率 / 范围 用途
onNavigationEventUpdated 1 Hz;含 currentManeuverdistanceToTurn 主界面当前引导与 ETA
onTurnByTurnListUpdated 事件驱动;当前已可用的机动列表(可能先部分、后完整) 导航指令列表 UI、路线预览、地图转向箭头等

二者数据类型均为 ManeuverInfo,字段说明见 导航状态信息

前置条件:startNavigation 并持有 NavigationSession;已注册 NavigationEventListener(若使用推送更新)。

流程概览

1
2
3
4
5
6
7
startNavigation
        ↓
路线或引导信息变化(见「触发条件」)
        ↓
onTurnByTurnListUpdated(List<ManeuverInfo>)   // 按路线顺序;可能多次回调(先部分、后完整)
        ↓
HMI 刷新导航指令列表 / 路线概览

接口说明

推送更新:onTurnByTurnListUpdated

1
fun onTurnByTurnListUpdated(maneuverInfoList: List<ManeuverInfo>)

主动查询:getManeuverList

1
fun getManeuverList(): List<ManeuverInfo>?

导航过程中调用本接口,返回的是上一次 onTurnByTurnListUpdated 推送的机动列表(SDK 内部缓存)。尚未收到过导航指令列表回调、或导航已结束时返回 null。列表更新仍以 onTurnByTurnListUpdated 为准;本接口适用于界面恢复等需要同步读取当前缓存的场景。

触发条件

以下情况之一发生时,SDK 会刷新并回调导航指令列表:

  • 导航中的路线发生变化(偏航触发更新路线、接受更优路/备选路、主动更新路线请求等,参见 换路通知
  • 该路线的引导信息更新
  • TA SDK 系统语言变更

ManeuverInfo 常用字段(摘要)

完整字段、Action / AssistAction、车道与路盾等见 导航状态信息

字段 说明
legIndex / stepIndex 机动所属 leg、step(从 0 开始)
turnAction / turnAssistAction 主转向与辅助动作(绘制图标时通常组合使用)
streetName 转弯后道路名
signpostBranchNames / signpostTowardsNames 路牌分支名 / 方向名(见 概述
laneInfo 车道引导(从左至右)
shieldInfoList 路盾;图标经 NavigationService.renderIcon 渲染
roundaboutInfo / exitLabel 环岛 / 高速出口信息
stepInfo 所属 step,可用于地图 showTurnArrow路线修改setAvoidSteps
isTightTurn 紧接转弯;为 true 时,该机动也会出现在 1 Hz 的 nextManeuver 中,含义相同
fromRoadClass / toRoadClass 转弯前/后道路等级

示例代码

刷新导航指令列表

1
2
3
4
5
6
override fun onTurnByTurnListUpdated(maneuverInfoList: List<ManeuverInfo>) {
    mainHandler.post {
        // 整表刷新列表 UI
        turnListAdapter.submitList(maneuverInfoList)
    }
}

与其它能力的关系

能力 关系
导航状态信息 currentManeuver / nextManeuver 为实时进度;本列表为当前已下发的规划机动
换路通知 换路成功后通常会再次触发本回调,需按新路线整表刷新
路线修改 maneuver.stepInfo 可构造 StepInfo 用于 setAvoidSteps

注意事项

  • getManeuverList() 返回上一次 onTurnByTurnListUpdated 的缓存,不会单独触发新的计算。
  • 部分 → 完整: 长路线可能先收到 partial 列表(约 50 km 量级),引导补全后再次回调;条数会增加,应整表覆盖更新。
  • 整表刷新: 引导更新后列表条数可能变化,应以最新一次 onTurnByTurnListUpdated 为准。
  • 回调线程: Message 线程,更新 UI 请切主线程。
  • 最后一项: 完整列表时多为到达终点(streetName 为空);部分列表时最后一项仅为当前段的末转,勿误判为终点。