HarmonyOS 鸿蒙Next中跳转到手机自带地图的导航代码
HarmonyOS 鸿蒙Next中跳转到手机自带地图的导航代码 我们有个场景, 点击我们应用的一个按钮, 底部有个选择框, 标题是选择导航, 选项包含高德地图, 百度地图, HarmonyOS自带的地图,点击后跳转到对应的应用,调起导航界面,传参中有经纬度等信息, 请问: (1)如果我想调起HarmonyOS 手机自带的地图的导航, 怎么写代码 (2)如果选择的是高德地图或者百度地图, 有代码示例吗?
更多关于HarmonyOS 鸿蒙Next中跳转到手机自带地图的导航代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请参考:通过Want拉起Petal 地图应用,链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/map-petalmaps-V5#section116043716599
应用内 拉起打开高德、百度地图APP导航:
为保护用户隐私,暂不提供查询已安装应用接口, 建议在拉起应用之后返回的错误信息中处理,错误码是16000001时,指定的ability不存在;
如果安装了其它地图 如高德、百度地图,需要根据对应三方地图的开发手册调用startAbility,并传入相应参数;
当前高德地图和百度地图相应能力仍在开发中,尚未具备,可持续关注官网最新消息。
启动其他应用的UIAbility 参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-startup-adjust-V5#启动其他应用的uiability
在HarmonyOS Next中跳转到手机自带地图导航的代码如下:
import wantConstant from '@ohos.app.ability.wantConstant';
let destination = {
latitude: 39.90469, // 目标纬度
longitude: 116.40717 // 目标经度
};
let wantValue = {
uri: `geo:${destination.latitude},${destination.longitude}?q=${destination.latitude},${destination.longitude}`,
action: wantConstant.ACTION_VIEW
};
try {
await context.startAbility(wantValue);
} catch (err) {
console.error(`启动地图失败: ${err.code}, ${err.message}`);
}
这段代码会调用系统默认地图应用打开指定坐标位置。需要确保设备已安装地图应用。
针对HarmonyOS Next中实现地图导航跳转功能,以下是解决方案:
- 调用HarmonyOS自带地图导航:
import featureAbility from '@ohos.ability.featureAbility';
import wantConstant from '@ohos.app.ability.wantConstant';
let location = {
latitude: 39.90469, // 纬度
longitude: 116.40717 // 经度
};
let want = {
bundleName: "com.huawei.maps",
abilityName: "com.huawei.maps.MapsAbility",
uri: `geo:${location.latitude},${location.longitude}?q=${location.latitude},${location.longitude}`,
action: "ohos.want.action.viewData",
flags: wantConstant.Flags.FLAG_ABILITY_NEW_MISSION
};
featureAbility.startAbility(want).then(() => {
console.log('跳转地图成功');
}).catch((err) => {
console.error('跳转失败: ' + JSON.stringify(err));
});
- 调用第三方地图导航:
高德地图示例:
let amapUri = `androidamap://navi?sourceApplication=yourAppName&lat=${location.latitude}&lon=${location.longitude}&dev=0&style=2`;
let want = {
bundleName: "com.autonavi.minimap",
uri: amapUri,
action: "ohos.want.action.viewData"
};
百度地图示例:
let baiduUri = `baidumap://map/navi?location=${location.latitude},${location.longitude}&src=yourAppName`;
let want = {
bundleName: "com.baidu.BaiduMap",
uri: baiduUri,
action: "ohos.want.action.viewData"
};
注意事项:
- 需要先在config.json中声明相关权限:
"reqPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
- 建议先使用system.hasBundle检查对应地图应用是否安装
- 不同地图的URI参数格式可能有所差异,需参考各平台最新文档,