下车步行导航流转
支持将车机指定的地图应用的步行导航数据流转至手机。
场景介绍
下车步行导航流转:用户下车前,车机地图应用导航还未结束,下车后可将车机上的导航数据流转至手机,发起步行导航。

接口说明
| 接口名 | 描述 |
|---|---|
| registerSystemNavigationListener | 注册监听系统导航信息和指令。 |
| unregisterSystemNavigationListener | 取消注册监听系统导航信息和指令。 |
开发流程

开发步骤
-
能力配置。
请参考配置能力进行配置。下车步行导航流转场景下,metadata的name取值为carHopCapability,value取值应为getOffCarNavi。示例代码如下所示:
"metadata": [{"name": "carHopCapability","value": "getOffCarNavi"}] -
导入相关模块。
import { navigationInfoMgr } from '@kit.CarKit';import { hilog } from '@kit.PerformanceAnalysisKit'; -
监听系统导航信息和指令。
地图应用需要注册监听系统导航信息和指令,方便地图应用接收系统指令。用户下车后,系统会给地图应用发送START_NAVIGATION指令,地图应用在收到指令后即可开启步行导航任务。
// 实现SystemNavigationListener接口class Listener implements navigationInfoMgr.SystemNavigationListener {// 实现onQueryNavigationInfo方法onQueryNavigationInfo(query: navigationInfoMgr.QueryType, args: Record<string, Object>): Promise<navigationInfoMgr.ResultData> {// 返回导航信息给系统return new Promise(resolve => {let ret: navigationInfoMgr.ResultData = {code: 1001,message: 'message test1',data: args}resolve(ret);})}// 实现onReceiveNavigationCmd方法onReceiveNavigationCmd(command: navigationInfoMgr.CommandType, args: Record<string, Object>): Promise<navigationInfoMgr.ResultData> {if (command == navigationInfoMgr.CommandType.START_NAVIGATION) {// 地图应用处理下车后自动开启步行导航的逻辑if (args !== undefined && args !== null) {// 获取导航类型let naviType: navigationInfoMgr.NaviType = args['naviType'] as navigationInfoMgr.NaviType;// 如果是步行导航if (naviType === navigationInfoMgr.NaviType.WALKING) {let destPoi: string = args['destPoi'] as string;// 获取目的地名let destLocationName: string = args['destName'] as string;// 获取目的地纬度let destLatitude: string = destPoi?.split(',')[0].toString();// 获取目的地经度let destLongitude: string = destPoi?.split(',')[1].toString();// 开发者根据destLocationName、destLatitude、destLongitude发起步行导航// ...}}}return new Promise(resolve => {let ret: navigationInfoMgr.ResultData = {code: 1002,message: 'message test2',data: args}resolve(ret);})}}try {// 获取NavigationController实例let navInfoController: navigationInfoMgr.NavigationController = navigationInfoMgr.getNavigationController();// 注册监听系统导航信息和指令navInfoController.registerSystemNavigationListener(new Listener());} catch (e) {// 捕获接口调用异常时的错误码并做相应处理hilog.error(0x0000, 'testTag', `register system navigation listener, error code: ${e?.code}`);} -
取消监听。
在地图应用退出时,需要取消之前注册的监听,减少手机系统不必要的资源消耗。
try {// 获取NavigationController实例let navInfoController: navigationInfoMgr.NavigationController = navigationInfoMgr.getNavigationController();// 取消注册监听系统导航信息和指令navInfoController.unregisterSystemNavigationListener();} catch (e) {// 捕获接口调用异常时的错误码并做相应处理hilog.error(0x0000, 'testTag', `unregister system navigation listener error, error code: ${e?.code}`);}