uni-app 跳转第三方地图定位

跳转流程如下:

  • APP端跳转至百度地图(第三方软件);
  • 若无,则跳转至高德地图(第三方软件);
  • 若无,则打开腾讯地图(uni自带方法:uni.openLocation)
  • 其它端打开腾讯地图(uni自带方法:uni.openLocation)

核心代码

// #ifdef APP-PLUS
switch(uni.getSystemInfoSync().platform){
    case 'android':
        console.log('运行Android上')
        openMapByAndroid(latitude, longitude, name)
        break;
    case 'ios':
        console.log('运行iOS上')
        openMapByIos(latitude, longitude, name)
        break;
    default:
        openMapByDefault(latitude, longitude, name)
        console.log('运行在开发者工具上')    
        break;
}    
// #endif
// #ifndef APP-PLUS
openMapByDefault(latitude, longitude, name)
// #endif

APP打开第三方地图的方法

  • APP判断第三方应用是否存在
/*
 * appInf: ( ApplicationInf ) 必选 要判断第三方程序的描述信息
 * Android平台需要通过设置appInf的pname属性(包名)进行查询。
 * iOS平台需要通过设置appInf的action属性(Scheme)进行查询,在iOS9以后需要添加白名单才可查询,
 * 在manifest.json文件plus->distribute->apple->urlschemewhitelist节点下添加(如urlschemewhitelist:["weixin"]).
 */
plus.runtime.isApplicationExist(appInf);
  • 判断百度地图应用是否存在
plus.runtime.isApplicationExist({pname: 'com.baidu.BaiduMap', action: 'baidumap://'})
  • 判断高德地图应用是否存在
plus.runtime.isApplicationExist({pname: 'com.autonavi.minimap'},action: 'iosamap://'})

APP调用第三方程序打开指定的URL

  • 核心Api说明
/*
 * 说明:调用第三方程序打开指定的URL
 * 参数:
 * url: ( String ) 必选 要打开的URL地址
 * errorCB: ( OpenErrorCallback ) 可选 打开URL地址失败的回调
 * identity: ( String ) 可选 指定打开URL地址的程序名称
 */
plus.runtime.openURL( url, errorCB, identity );
  • 打开第三方程序实际应用
function openURL(url, identity ) {
    let newurl = encodeURI(url);
    plus.runtime.openURL( newurl, function(res){
        uni.showModal({
            content: res.message
        })
    }, identity);
}
  • 打开android百度地图
url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo`
identity = 'com.baidu.BaiduMap'
openURL(url, identity)
  • 打开android高德地图
url = `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
identity = 'com.autonavi.minimap'
openURL(url, identity)
  • 打开ios百度地图
url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
openURL(url, identity)
  • 打开ios高德地图
url = `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
openURL(url, identity)

其他平台打开地图的方法

其他平台采用uni.openLocation(OBJECT)方法使用应用内置地图查看位置。

uni.openLocation({
    latitude: latitude,
    longitude: longitude,
    name: name,
    fail: () => {
        uni.showModal({
            content: '打开地图失败,请重'
        })
    },
})