如何实现通过context的startAbility方法打开高德地图进行导航,以及获取高德地图的key

一、前置配置

1.声明权限与协议

module.json5中添加权限和querySchemes,用于检测高德地图是否安装:

"requestPermissions": [
  { "name": "ohos.permission.INTERNET" },    // 网络权限
  { "name": "ohos.permission.LOCATION" }     // 定位权限
],
"abilities": [
  {
    "name": "EntryAbility",
    "querySchemes": ["amapuri"]             // 高德地图协议标识
  }
]
2.检测高德地图安装状态​

通过bundleManager检测设备是否安装高德地图:

import bundleManager from '@ohos.bundle.bundleManager';

async checkAmapInstalled(): Promise<boolean> {
  try {
    return await bundleManager.canOpenLink('amapuri://');
  } catch (err) {
    console.error(`检测失败: ${err.code}, ${err.message}`);
    return false;
  }
}

二、构造导航URI参数​

1.地址转经纬度​

使用第三方库(如@pura/harmony-utils)将文字地址转为高德地图支持的GCJ02坐标系坐标。我的上一个文章中有说明,用context传递坐标给高德。

2.URI参数说明​

参数​必填说明
dlat & dlon目标地点经纬度(需GCJ02坐标系)
dname目标名称(如“天安门”)
dev坐标系类型:0(已加密坐标)或1(需国测加密)
t导航类型:0(驾车)、1(公交)、2(步行)、3(骑行)

三、拉起导航的核心内容

通过Want对象构造URI并启动高德地图。

async startAmapNavigation() {
  if (!await this.checkAmapInstalled()) {
    promptAction.showToast({ message: "请先安装高德地图" });
    return;
  }

  const context = getContext(this) as common.UIAbilityContext;
  const want: Want = {
    uri: `amapuri://navi?sourceApplication=MyApp&dlat=${latitude}&dlon=${longitude}&dname=天安门&dev=0&t=0`
  };

  context.startAbility(want, (err: BusinessError) => {
    if (err.code) {
      console.error(`导航失败: ${err.code}, ${err.message}`);
      promptAction.showToast({ message: "启动导航失败,请重试" });
    }
  });
}

四、获取高德地图的key

入门指南-HarmonyOS NEXT 导航SDK | 高德地图API

以上为获取高德地图key的相关文档,有需要的可以去查看

1.搭建鸿蒙开发环境

开发鸿蒙应用需要使用鸿蒙的IDE进行开发,具体内容请参考 鸿蒙官网开发文档

  1. 开始前请参考 下载与安装软件、 配置开发环境,完成DevEco Studio的安装和开发环境配置。

  2. 开发环境配置完成后,请参考 创建和运行Hello World 创建工程。

  3. 工程创建完成后,使用 预览器 或Phone模拟器 运行该工程。

2.配置应用的签名信息

应用工程创建完成后,需要配置签名信息,才可以使用真机调试和发布应用。具体的签名配置请参考 华为官网的配置应用签名信息指南

3.获取应用的appId
1. ​​配置应用签名信息​

​前提​​:需在DevEco Studio中完成应用签名配置(参考鸿蒙官方签名指南),否则无法获取有效AppId。

签名作用​​:确保应用唯一性,AppId包含签名哈希值,用于高德SDK鉴权。

2. ​​编写代码获取AppId​

在应用启动时(如EntryAbilityonCreate或页面aboutToAppear生命周期),通过bundleManager接口获取签名信息:

配置完签名信息之后,就可以获取当前应用的appId了,这个appId主要用于申请高德的apiKey,请确定最终发布应用的appId, 防止最终高德SDK鉴权失败。

目前只能通过代码获取应用的appId,具体代码请参考如下代码

let flag = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO;
let bundleInfo = bundleManager.getBundleInfoForSelfSync(flag)
let appId = bundleInfo.signatureInfo.appId;

最终获取的appId格式类似于:com.amap.demo_BGtGgVB3ASqU7ar1nHkwX4s0nIexDbEwqNrVoatUDs17GrClWC7V2/zhoYh6tFQHAd5DASWVTEAgvZfzrEGljjs=

注意:为了确保鉴权通过,请确保真机调试时使用的key是基于真机获取的appid申请的,而云真机调试时则应使用云真机appid对应的key

4.申请高德API Key
1.创建新应用

进入 控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。

在本段第三行有获取AppID的方法,点击提交获取key值

5.在代码中设置申请的Key
//申请地址:https://console.amap.com/dev/key/app,appId在日志中过滤即可获取
const appkey = '你申请的 Key'
this.naviInstance = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appkey)

提示

请保证在调用任何高德导航SDK的接口之前将apikey设置给高德导航SDK,建议放到Application的初始化之中

五、​​注意事项​

1.​​真机测试​​:需签名后的应用包才能调用第三方App

2.参数校验​​:经纬度范围需合法(纬度:-90~90,经度:-180~180)

3.用户体验​​:建议在按钮点击事件中触发导航,并添加加载提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值