文档管理中心
HiCar Guides其它应用接入适配其他功能适配摇一摇导航流转

适配摇一摇导航流转

场景说明

摇一摇导航流转是将手机应用界面上的地址信息无缝流转至HiCar车机端,直接开启目的地导航。

当应用界面上存在地址信息时,开发者可以将地址信息设置对应的标签,即可实现摇一摇导航流转功能。

开发步骤

方案一(推荐):通过Car Kit接口实现

  1. 在应用配置中增加导航流转配置和相关权限。

    收起
    自动换行
    深色代码主题
    复制
    1. {
    2. "module": {
    3. "abilities": [
    4. {
    5. "name": "xxxx",
    6. "srcEntry": "xxxx",
    7. "description": "xxxx",
    8. "skills": [
    9. {
    10. "actions": [
    11. "action.navigation.infoservice"
    12. ]
    13. },
    14. {...}
    15. ],
    16. "metadata": [
    17. {
    18. "name" : "carHopCapability",
    19. "value" : "carHopNavi"
    20. },
    21. ]
    22. }
    23. ],
    24. "requestPermissions": [
    25. {
    26. "name": "ohos.permission.ACCESS_SERVICE_NAVIGATION_INFO"
    27. }
    28. ]
    29. }
    30. }

  1. 在应用启动时注册系统监听registerSystemNavigationListener并实现onQueryNavigationInfo方法回

    收起
    自动换行
    深色代码主题
    复制
    1. try {
    2. const navInfoController: navigationInfoMgr.NavigationController = navigationInfoMgr.getNavigationController();
    3. navInfoController.registerSystemNavigationListener({
    4. onQueryNavigationInfo: (query: navigationInfoMgr.QueryType,
    5. args: Record<string, Object>) => {
    6. return new Promise((resolve, reject) => {
    7. if (query === navigationInfoMgr.QueryType.NAVIGATION_STATUS) {
    8. const status = {} as navigationInfoMgr.NavigationStatus;
    9. if (当前处于地址界面) {
    10. status.status = navigationInfoMgr.MapStatus.POI;
    11. status.destLocation = {
    12. name: 'xxxxx', // 地址名称
    13. coordType: navigationInfoMgr.LocationCoordType.GCJ02,
    14. longitude: xxx, // 地址经度
    15. latitude: xxx, // 地址纬度
    16. altitude: 0
    17. }
    18. } else {
    19. status.status = navigationInfoMgr.MapStatus.IDLE;
    20. status.destLocation = {
    21. name: 'xxxxx', // 地址名称
    22. coordType: navigationInfoMgr.LocationCoordType.GCJ02,
    23. longitude: -999, // 地址经度
    24. latitude: -999, // 地址纬度
    25. altitude: 0
    26. }
    27. }
    28. let result: navigationInfoMgr.ResultData = {
    29. code: 0,
    30. data: JSON.parse(JSON.stringify(status)),
    31. message: 'success'
    32. }
    33. resolve(result);
    34. } else {
    35. reject({ code: 0, message: 'Not supported' });
    36. }
    37. });
    38. },
    39. onReceiveNavigationCmd: (command: navigationInfoMgr.CommandType, args: Record<string, Object>) => {
    40. return new Promise((resolve, reject) => {
    41. reject({ code: 0, message: 'Not supported' });
    42. });
    43. }
    44. });
    45. } catch (err) {
    46. ......
    47. }

  1. 在应用退出时取消注册系统查询监听。

    收起
    自动换行
    深色代码主题
    复制
    1. try {
    2. const navInfoController: navigationInfoMgr.NavigationController = navigationInfoMgr.getNavigationController();
    3. navInfoController.unregisterSystemNavigationListener();
    4. } catch (err) {
    5. ......
    6. }

方案二:通过ArkUI Text组件地址标签实现

如果应用未接入Car Kit,可通过该方式实现摇一摇导航流转。

  1. 配置支持导航流转。

    收起
    自动换行
    深色代码主题
    复制
    1. {
    2. "module": {
    3. "abilities": [
    4. {
    5. "name": "xxxx",
    6. "srcEntry": "xxxx",
    7. "description": "xxxx",
    8. "skills": [
    9. {
    10. "actions": [
    11. "action.navigation.infoservice"
    12. ]
    13. },
    14. {...}
    15. ],
    16. "metadata": [
    17. {
    18. "name" : "carHopCapability",
    19. "value" : "carHopAddress"
    20. },
    21. ]
    22. }
    23. ]
    24. }
    25. }

  2. 通过ArkUI的accessibilityTextHint属性为显示地址的组件设置地址标签。

    收起
    自动换行
    深色代码主题
    复制
    1. const hintContent = JSON.stringify({
    2. type: 'location',
    3. groupId: 1,
    4. index: 1,
    5. });
    6. Text('地址描述')
    7. .accessibilityTextHint(hintContent)
    表1 字段说明
    展开

    字段名

    描述

    type

    文本属性,固定为“location”,代表文字是地址信息。

    groupId

    文本分组,当地址需要拆分为多个Text组件时,设置为同一个id,则表示是一个地址。

    index

    文本组内顺序,标识在同一个groupId中的排序。

在 指南 中进行搜索
请输入您想要搜索的关键词