z***@zhongruigroup.com
z***@zhongruigroup.com
  • 发布:2026-02-27 10:58
  • 更新:2026-02-27 11:01
  • 阅读:21

鸿蒙系统上,卓易通安装的uniapp应用,如何打开鸿蒙版的高德地图等app?

分类:uni-app

使用下面的方法,hasBaiduMap、hasAmap等打印的都是false

export function handleNavigation(plus, latitude, longitude, name) {  
  console.log('终点经纬度', latitude + '=' + longitude)  
  let url = ''  

  if (plus.os.name === 'iOS') {  
    // iOS:使用 iOS 专用 scheme 检测(高德用 iosamap://)  
    // 需在 manifest.json -> app-plus->distribute->apple->urlschemewhitelist 配置如 ["iosamap","baidumap","qqmap"]  
    const hasBaiduIos = plus.runtime.isApplicationExist({  
      pname: 'com.baidu.BaiduMap',  
      action: 'baidumap://',  
    })  
    const hasAmapIos = plus.runtime.isApplicationExist({  
      pname: 'com.autonavi.minimap',  
      action: 'iosamap://',  
    })  
    const hasTencentIos = plus.runtime.isApplicationExist({  
      pname: 'com.tencent.map',  
      action: 'qqmap://',  
    })  
    console.log('iOS 百度=' + hasBaiduIos + ' 高德=' + hasAmapIos + ' 腾讯=' + hasTencentIos)  

    const buttonArray = [{ mapType: 'iosmap', title: '苹果地图' }]  
    if (hasBaiduIos) buttonArray.push({ mapType: 'baidu', title: '百度地图' })  
    if (hasAmapIos) buttonArray.push({ mapType: 'gaode', title: '高德地图' })  
    if (hasTencentIos) buttonArray.push({ mapType: 'tengxun', title: '腾讯地图' })  

    plus.nativeUI.actionSheet(  
      { title: '选择地图应用', cancel: '取消', buttons: buttonArray },  
      function (e) {  
        const obj = buttonArray[e.index - 1]  
        if (!obj) return  
        switch (obj.mapType) {  
          case 'iosmap':  
            url = `http://maps.apple.com/?daddr=${latitude},${longitude}`  
            break  
          case 'baidu':  
            url = `baidumap://map/marker?location=${latitude},${longitude}&title=${encodeURIComponent(name)}&content=${encodeURIComponent(name)}&src=ios.baidu.openAPIdemo&coord_type=gcj02`  
            break  
          case 'gaode':  
            url = `iosamap://viewMap?sourceApplication=applicationName&lat=${latitude}&lon=${longitude}&dev=0`  
            break  
          case 'tengxun':  
            url = `qqmap://map/geocoder?coord=${latitude},${longitude}`  
            break  
          default:  
            break  
        }  
        if (url !== '') {  
          plus.runtime.openURL(url, function (_err) {  
            plus.nativeUI.alert('本机未安装指定的地图应用')  
          })  
        }  
      },  
    )  
  } else {  
    // Android:使用 Android 专用 scheme 检测(高德用 androidamap://)  
    const hasBaiduMap = plus.runtime.isApplicationExist({  
      pname: 'com.baidu.BaiduMap',  
      action: 'baidumap://',  
    })  
    const hasAmap = plus.runtime.isApplicationExist({  
      pname: 'com.autonavi.minimap',  
      action: 'androidamap://',  
    })  
    const hasTencent = plus.runtime.isApplicationExist({  
      pname: 'com.tencent.map',  
      action: 'qqmap://',  
    })  
    console.log('Android 百度=' + hasBaiduMap + ' 高德=' + hasAmap + ' 腾讯=' + hasTencent)  

    const urlBaiduMap = `baidumap://map/marker?location=${latitude},${longitude}&title=${encodeURIComponent(name)}&coord_type=gcj02&src=andr.baidu.openAPIdemo`  
    const urlAmap = `androidamap://viewMap?sourceApplication=appname&poiname=${encodeURIComponent(name)}&lat=${latitude}&lon=${longitude}&dev=0`  
    const urlTencent = `qqmap://map/geocoder?coord=${latitude},${longitude}`  

    const buttons = []  
    if (hasBaiduMap) buttons.push({ title: '百度地图', mapType: 'baidu' })  
    if (hasAmap) buttons.push({ title: '高德地图', mapType: 'gaode' })  
    if (hasTencent) buttons.push({ title: '腾讯地图', mapType: 'tengxun' })  
    if (buttons.length > 0) {  
      plus.nativeUI.actionSheet({ title: '选择地图应用', cancel: '取消', buttons }, function (e) {  
        const obj = buttons[e.index - 1]  
        if (!obj) return  
        switch (obj.mapType) {  
          case 'baidu':  
            plus.runtime.openURL(urlBaiduMap)  
            break  
          case 'gaode':  
            plus.runtime.openURL(urlAmap)  
            break  
          case 'tengxun':  
            plus.runtime.openURL(urlTencent)  
            break  
        }  
      })  
    } else {  
      // 未安装任何地图应用时使用 geo:(如启动系统/Google 地图)  
      url = `geo:${latitude},${longitude}?q=${encodeURIComponent(name)}`  
      plus.runtime.openURL(url)  
    }  
  }  
}  
2026-02-27 10:58 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

在卓易通(安卓模拟器沙盒)里运行的 uni-app 应用,本质上是安卓 apk,无法直接调起“鸿蒙版”高德地图
原因:卓易通把系统信息伪装成 android,uni-app 在鸿蒙专有的 API(包括唤起鸿蒙原生应用的 uts 接口)都会被屏蔽,只能使用安卓的调用方式。

因此,你只能走安卓的唤起逻辑:

  1. 在 manifest.json → App模块配置 → Maps 里勾选“高德地图”,并填写安卓 Key。
  2. 使用 plus.runtime.openURL 或 plus.runtime.launchApplication 去打开高德,示例:
// 安卓包名  
const pkg = 'com.autonavi.minimap'  
// 构造 intent  
const url = `androidamap://route?sourceApplication=yourApp&dlat=39.98871&dlon=116.43234&dev=0&t=0`  
plus.runtime.openURL(url, (err) => {  
  // 未安装时引导去应用市场  
  plus.runtime.openURL('market://details?id=' + pkg)  
})
  1. 若需要判断用户是否安装高德,可用 plus.runtime.isApplicationExist({pname: pkg})。

总结:在卓易通环境下,不存在“鸿蒙版”高德地图的入口,只能按安卓方式唤起高德安卓客户端。

内容为 AI 生成,仅供参考

要回复问题请先登录注册