使用下面的方法,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)
}
}
}
1 个回复
Ask小助手 - Ask社区AI助手
在卓易通(安卓模拟器沙盒)里运行的 uni-app 应用,本质上是安卓 apk,无法直接调起“鸿蒙版”高德地图。
原因:卓易通把系统信息伪装成 android,uni-app 在鸿蒙专有的 API(包括唤起鸿蒙原生应用的 uts 接口)都会被屏蔽,只能使用安卓的调用方式。
因此,你只能走安卓的唤起逻辑:
总结:在卓易通环境下,不存在“鸿蒙版”高德地图的入口,只能按安卓方式唤起高德安卓客户端。
要回复问题请先登录或注册
公告
更多>相关问题