更新记录

7.0(2022-11-07)

startLocation接口添加了是否启用日志、是否启用定位失败通知、是否显示后台定位通知、是否启用无声音乐保活等参数。

6.0(2022-03-25)

修复部分设备调用不了忽略电池优化功能造成的BUG;优化权限提示信息;新增设置自启动功能等

5.0(2022-03-17)

新增点击通知进入当前活动页面功能;修复Android10以下版本没有后台定位权限造成的打开定位权限组功能异常等问题

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:6.0 - 11.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


高德持续定位插件示例APK

购买前请扫码下载APK进行体验

0、更新说明

1.0版本:最初版本

2.0版本:修复通知图标是固定图标的问题,实现通知图标跟随应用图标

3.0版本:添加高德隐私合规检查,修复因缺少隐私合规检查导致的定位无法启动问题

4.0版本:添加WIFI模块检测功能,因为开启WIFI模块会提升高德网络定位的准确性

5.0版本:新增点击通知进入当前活动页面功能;修复Android10以下版本没有后台定位权限造成的打开定位权限组功能异常等

6.0版本:修复部分设备调用不了忽略电池优化功能造成的BUG;优化权限提示信息;新增设置自启动功能等

7.0版本:startLocation接口添加了是否启用日志、是否启用定位失败通知、是否显示后台定位通知、是否启用无声音乐保活等参数

1、权限相关接口【仅支持Android6.0及以上版本】

1.1 权限检测

checkPermission({
    checkGPS: true, //检测GPS是否开启
    checkLocation: true, //检测基础定位服务是否开启
    checkBackLocation: true, //检测后台定位是否开启
    checkWakeLock: true, //检测屏幕唤醒是否开启
    checkBattery: true, //检测是否加入电池优化白名单
    checkWIFI:true, //检测是否开启WIFI模块,无需连接上某个具体的WIFI,开启WIFI模块即可提升定位准确性
    checkedPermissions:["android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"],//检测指定的权限
},res=>{
    console.log(res);
    res={
        "message": "权限已检查!",
        "gpsEnabled": true,
        "locationEnabled": false,
        "wakeLockEnabled": false,
        "IgnoreBatteryOptimizationsEnabled": false,
        "backLocationEnabled": false,
        "wifiEnabled":true,
        "code": 0,
        "permissionEnabled": {
            "android.permission.WRITE_EXTERNAL_STORAGE": true,
            "android.permission.READ_EXTERNAL_STORAGE": true
        },
    }
})

1.2 打开GPS服务

openGPS(res=>{
    console.log(res);
    res={
        "message": "打开GPS!",
        "code": 0
    }
})

1.3 打开基础定位服务

openLocation(res=>{
    console.log(res);
    res={
        "message": "打开定位!",
        "code": 0
    }
})

1.4 打开后台定位服务

openBackLocation(res=>{
    console.log(res);
    res={
        "message": "打开后台定位!",
        "code": 0
    }
})

1.5 开启定位权限组,即开启GPS服务、基础定位服务、后台定位服务

openLocationPermissionGroup(res=>{
    console.log(res);
    res={
        "message": "打开定位权限组!",
        "code": 0
    }
})

1.6 开启后台唤醒,使CPU一直处于工作的状态

openWakeLock(res=>{
    console.log(res);
    res={
        "message": "打开后台唤醒!",
        "code": 0
    }
})

1.7 关闭后台唤醒,注:应用销毁时,wakeLock锁立即释放,自动关闭后台唤醒

closeWakeLock(res=>{
    console.log(res);
    res={
        "message": "关闭后台唤醒!",
        "code": 0
    }
})

1.8.1 设置是否忽略电池优化

setBatteryOptimizations(res=>{
    console.log(res);
    res={
        "message": "设置电池优化!",
        "code": 0
    }
})

1.8.2 设置是否忽略电池优化(支持自定义提示弹窗)

setBatteryOptimizationsCustom({
    showDialog:true, // 是否显示弹窗 ,默认值true,可选
    setTitle:'支持自定义标题',  // 设置提示弹窗标题,默认值“提示”, 可选 
    setMessage:'支持自定义提示内容', // 设置提示弹窗内容,默认值“若您希望app后台保活,请忽略电池优化(即电池优化设置为未优化),部分设备需设置省电策略为【无限制】。”, 可选
},res=>{
    console.log(res);
    res={
        "message": "设置电池优化!",
        "code": 0
    }
})

1.9 检测并打开指定权限

getPermission({
    permissions:["android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"]
},res=>{
    console.log(res);
    res={
        "message": "已请求权限!",
        "code": 0
    }
})

2.0.1 检测并打开WIFI模块

openWIFI(res=>{
    console.log(res);
    res={
        "message": "打开WIFI模块!",
        "code": 0
    }
})

2.0.2 检测并打开WIFI模块(支持自定义提示弹窗)

openWIFICustom({
    showDialog:true, // 是否显示弹窗 ,默认值true,可选
    setTitle:'支持自定义标题',  // 设置提示弹窗标题,默认值“提示”, 可选 
    setMessage:'支持自定义提示内容', // 设置提示弹窗内容,默认值“开启WIFI模块会提升定位的准确性”, 可选 
},res=>{
    console.log(res);
    res={
        "message": "打开WIFI模块!",
        "code": 0
    }
})

2.1 设置自启动

setAutoStart(res=>{
    console.log(res);
    res={
        "message": "设置自启动!",
        "code": 0
    }
    或
    res={
        "message": "当前机型暂不支持设置自启动权限!",
        "code": 0
    }
})

2、定位相关接口【需申请高德定位key才能使用】

2.1 启动定位

注意事项

  1. 后台定位:应用进入后台时开启后台定位,进入前台时关闭后台定位;
  2. 开启后台定位时,系统通知栏会显示应用“正在后台运行”的通知;
  3. 关闭后台定位后,通知销毁。
  4. 前台服务:开启后应用始终在前台运行。运行标志:系统通知栏会显示应用“正在持续定位”的通知;
  5. 应用销毁或关闭定位,则销毁前台服务。
  6. 室内没有GPS信号,涉及室内场景时,慎重开启GPS优先功能,因为开启后定位过程变慢,容易定位超时。
  7. 设置是否优先返回GPS定位结果,如果30秒内GPS没有返回定位结果则进行网络定位,只有在高精度模式下的单次定位有效,其他方式无效
  8. 设置onceLatest为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
    startLocation({
    setInterval: 2, // 定位间隔,单位 s。默认 2s,可选
    cacheEnable: true, // 是否允许缓存,既当位置不变时返回最后一次定位的地址。默认 true,可选
    setLocationMode: 2, // 设置定位模式,可选的模式有高精度 2、仅设备 1、低功耗模式 0。默认为高精度模式 2,可选
    setLocationMode: 0 , // 设置逆地理信息的语言,可选值有默认语言 0 、中文 1、英文 2。默认值为默认语言 0,可选
    needAddress: true, // 设置是否返回逆地理地址信息。默认 true,可选
    onceLocation: false, // 设置是否单次定位。默认 false,可选
    gpsFirst: false, // 设置是否gps优先,仅高精度模式下的单次定位有效。默认 false,可选
    onceLatest: false,// 设置是否等待设备wifi刷新,提高首次定位精度。默认 false,可选
    sensorEnable: true, // 设置是否使用传感器,当设置为true时会通过手机传感器获取方向角和速度。默认 false,可选
    mockEnable: true, //设置是否允许模拟软件Mock位置结果。默认 true,可选
    setHttpTimeOut: 30, // 设置联网超时时间,在仅设备模式下无效,单位 s。默认 30s,可选
    setGpsFirstTimeout: 50,// 设置优先返回卫星定位信息时等待卫星定位结果的超时时间,单位 s。默认 50s,可选
    enableBackgroundLocation:true,//默认启动后台定位,可选
    startForegroundService:true,//默认启动前台服务,启动单次定位时,自动关闭前台服务。可选
    startAlarm:false,//默认不启用闹钟,可选,闹钟在手机休眠情况下唤醒CPU来工作
    alarmStartTime:2,//闹钟首次执行时间,单位秒。默认2s后,可选
    alarmInterval:5,//两次闹钟执行之间的时间间隔,单位秒。默认5s,最小间隔5s,可选
    hasLog:false,//创建日志,默认false,可选
    openAdviseNotice:false,//创建提示语义(定位失败)通知,默认false,可选
    showBackgroundNotice:false,//显示后台定位通知,默认false,可选
    startMuteMusicService:true,//启用无声音乐保活,默认true,可选
    },res=>{
    //doSomething
    console.log(res);
    res={
        "code": 0,
        "message": "success",
        "type": 2,  // 定位类型  见注释 4.7
        "provider": "lbs",  // 获取定位提供者  见注释 4.2
        "coordType": "GCJ02", // 坐标系类型  见注释 4.3
        "latitude": 37.656807,     // 纬度
        "longitude": 118.146717,  // 经度
        "accuracy": 29,  //  获取精度信息 单位:米
        "bearing": 0,  //获取方向角 (单位:度) 默认值:0.0  见注释 4.1
        "speed": 0,  //速度 单位:米/秒  见注释 4.9
        "country": "中国",  //  国家
        "province": "XX省", //  省份
        "city": "XX市",  //  城市
        "cityCode": "1111",  //城市编码
        "district": "XX区",  //县区
        "adCode": "123456",  //  获取区域编码
        "poiName": "XXXXX", // 兴趣点
        "address": "XXXXX", //  地址
        "description": "在XXXX附近",  // 获取位置语义信息
        "locationQuality": { // 获取定位质量报告  见注释 4.11
            "netUseTime": 0,
            "gPSSatellites": 0,
            "installedHighDangerMockApp": false,
            "adviseMessage": "", //提示语义
            "gPSStatus": 0,
            "networkType": "WIFI",
            "wifiAble": true
        },
        "gPSSatellites": 0,  //  GPS星数  属于locationQuality
        "gPSStatus": "GPS状态正常",  //  GPS状态  属于locationQuality
        "wifiAble": "开启"  //  WIFI开关  属于locationQuality
        "satellites": 0,  //获取当前可用卫星数量, 仅在卫星定位时有效,
        "gpsAccuracyStatus": -1, //获取卫星信号强度,仅在卫星定位时有效,  见注释 4.10
        "conScenario": 75, //  获取室内外置信度  见注释 4.6
        "trustedLevel": 1,  //获取定位结果的可信度  见注释 4.4
        "locationTime": "2022-02-17 15:49:04",  //定位完成的时间
        "callbackTime": "2022-02-17 15:49:15",  // 定位之后的回调时间
    }
    })

2.2 停止定位

  1. 停止定位后,需进行销毁操作,才能重新启动定位。
    stopLocation(res=>{
    console.log(res);
    res={
        "message": "定位停止",
        "code": 0
    }
    })

2.3 销毁定位

  1. 应用销毁时,会自动销毁定位,因此需要在进入app的时候(onLaunch时),重新检测权限并开启定位服务
  2. 建议退出登录时,手动销毁定位,在登录页面,重新检测权限并开启定位服务
    destroyLocation();

2.4 手动开启后台定位

  1. 部分机型在startLocation()方法中启动后台定位无效,

  2. 则需用户在startLocation()中将enableBackgroundLocation设置为false后,手动启动后台定位。

  3. 在App.vue文件的onShow()方法中开启后台定位。

    openBackgroundLocation(res=>{
    console.log(res);
    });

2.5 手动关闭后台定位

  1. 在App.vue文件的onHide()方法中关闭后台定位
    closeBackgroundLocation(res=>{
    console.log(res);
    });

3、其他接口

3.1 测试生命周期

  1. 切入后台时不会进入onActivityStop,进入的是onActivityPause
    testOnActivity(res=>{
    console.log(res);
    res={
    "OnActivity": "isResume",
    "onState": "切入前台:不需要后台定位功能"
    }
    OnActivity=["isCreate","isStart","isResume","isStop","isPause","isDestroy"]
    });

3.1 测试闹钟

testAlarm(res=>{
    console.log(res);
    res={
        "onReceiveTime": "2022-02-17 16:19:20",//闹钟广播时间
        "alarmContent":"闹钟广播存在:定位已开启。唤醒闹钟后无操作。"
    }
});

4、注释

4.1 bearing 方向角(单位:度) 默认值:0.0

  1. 取值范围:【0,360】,其中0度表示正北方向,90度表示正东,180度表示正南,270度表示正西
  2. 3.1.0之前的版本只有定位类型为 AMapLocation.LOCATION_TYPE_GPS时才有值
  3. 自3.1.0版本开始,不限定定位类型,当定位类型不是AMapLocation.LOCATION_TYPE_GPS时,
  4. 可以通过 AMapLocationClientOption.setSensorEnable(boolean) 控制是否返回方向角,
  5. 当设置为true时会通过手机传感器获取方向角,如果手机没有对应的传感器会返回0.0
  6. 注意:
  7. 定位类型为AMapLocation.LOCATION_TYPE_GPS(即响应码=1)时,方向角指的是运动方向
  8. 定位类型不是AMapLocation.LOCATION_TYPE_GPS(即响应码=1)时,方向角指的是手机朝向

4.2 provider 定位提供者

  1. lbs:高德网络定位
  2. gps:卫星定位

4.3 coordType 坐标系类型

  1. GCJ02:AMapLocation.COORD_TYPE_GCJ02坐标系
  2. WGS84:AMapLocation.COORD_TYPE_WGS84坐标系,国外定位时返回的是WGS84坐标系

4.4 trustedLevel 定位结果的可信度 ,只有在定位成功时才有意义 :

响应码 中文描述 英文描述
1 非常可信 AMapLocation.TRUSTED_LEVEL_HIGH
2 可信度一般 AMapLocation.TRUSTED_LEVEL_NORMAL
3 可信度较低 AMapLocation.TRUSTED_LEVEL_LOW
4 非常不可信 AMapLocation.TRUSTED_LEVEL_BAD

4.5 accuracy 获取定位精度 单位:米

4.6 conScenario 室内外置信度

  1. 室内:且置信度取值在[1 ~ 100],值越大在在室内的可能性越大
  2. 室外:且置信度取值在[-100 ~ -1] ,值越小在在室内的可能性越大
  3. 无法识别室内外:置信度返回值为 0

4.7 type 定位的来源:

响应码 说明 介绍
0 定位失败 请通过错误码参考错误码对照表进行问题排查。
1 GPS定位结果 通过设备GPS定位模块返回的定位结果,精度较高,在10米-100米左右
2 前次定位结果 网络定位请求低于1秒、或两次定位之间设备位置变化非常小时返回,设备位移通过传感器感知。
4 缓存定位结果 返回一段时间前设备在同样的位置缓存下来的网络定位结果
5 Wifi定位结果 属于网络定位,定位精度相对基站定位会更好,定位精度较高,在5米-200米之间。
6 基站定位结果 纯粹依赖移动、联通、电信等移动网络定位,定位精度在500米-5000米之间。
8 离线定位结果 -
9 最后位置缓存 -

4.8 satellites 卫星数量

4.9 speed 获取当前速度(单位:米/秒) 默认值:0.0

  1. 3.1.0之前的版本只有定位类型为 AMapLocation.LOCATION_TYPE_GPS时才有值
  2. 自3.1.0版本开始,不限定定位类型,当定位类型不是AMapLocation.LOCATION_TYPE_GPS时,
  3. 可以通过 AMapLocationClientOption.setSensorEnable(boolean) 控制是否返回速度值,
  4. 当设置为true时会通过手机传感器获取速度,如果手机没有对应的传感器会返回0.0

4.10 gpsAccuracyStatus 获取卫星信号强度,仅在卫星定位时有效,

响应码 描述
0 GPS_ACCURACY_BAD
1 GPS_ACCURACY_GOOD
-1 GPS_ACCURACY_UNKNOWN

4.11 locationQuality 定位质量报告

  1. AdviseMessage: 获取提示语义,状态良好时,返回的是内容为空 根据当前的质量报告,给出相应的建议
  2. GPSSatellites: 获取当前的卫星数, 只有在非低功耗模式下此值才有效
  3. GPSStatus: 获取卫星状态信息,只有在非低功耗模式下此值才有效
  4. NetUseTime: 获取网络定位时的网络耗时 单位:毫秒
  5. NetworkType: 获取网络连接类型(2G、3G、4G、WIFI)
  6. isInstalledHighDangerMockApp: 是否安装了高危位置模拟软件,首次定位可能没有结果
  7. isWifiAble: wifi开关是否打开 如果wifi关闭建议打开wifi开关,提高定位质量

5、示例

init(){     
    let that = this;
    that.L_Amap = uni.requireNativePlugin("Luna-Amap");
    let getStart = true;
    that.L_Amap.checkPermission({
        checkGPS: true, //检测GPS是否开启
        checkLocation: true, //检测基础定位服务是否开启
        checkBackLocation: true, //检测后台定位是否开启
        checkWakeLock: true, //检测后台唤醒应用是否开启
        checkBattery: true, //检测是否加入电池优化白名单
    }, res => {
        console.log(res)
        if (!res.IgnoreBatteryOptimizationsEnabled) { //未忽略电池优化
            getStart = false;
            //设置忽略电池优化
            that.L_Amap.setBatteryOptimizations(msg => {
                console.log(msg)
            })
        }
        if (!res.wakeLockEnabled) { //后台唤醒应用未启动,注:应用销毁时,wakeLock锁立即释放
            //开启后台唤醒应用
            that.L_Amap.openWakeLock(msg => {
                console.log(msg)
            })
        }
        if (!res.gpsEnabled || !res.locationEnabled || !res.backLocationEnabled) { //定位三件套有一个未开启时
            getStart = false;
            //开启定位权限组
            that.L_Amap.openLocationPermissionGroup(msg => {
                console.log(msg);
            })
        }

        if (!getStart) {
            return;
        } else {
            that.startLocation();
        }

    })
},
startLocation() {
    let that = this;
    uni.showLoading({
        title: '开启中……'
    });
    // 持续定位
    that.L_Amap.startLocation({
        setInterval: that.interval, // 定位间隔,单位 s,不是必须的,默认 2s
        cacheEnable: true,  // 是否允许缓存,默认为true,既当位置不变时返回最后一次定位的地址,不是必须的
        sensorEnable: true, // 当设置为true时会通过手机传感器获取速度
        needAddress: false, // 是否返回位置信息
    }, result => {
        // 处理回调结果
        console.log(that.interval);
        console.log(result);
        uni.hideLoading();
        if (result.code == 0) {
            //持续定位成功,会返回详细信息,具体内容见 【2.1 启动定位】

        } else {
            //持续定位失败,会返回详细的失败原因
            console.log(result);

        }

    })
},
closeLocation(){
    let that = this;
    if (that.L_Amap != null) {
        console.log('关闭持续定位');
        // 如需要回调结果则为
        that.L_Amap.stopLocation(res => {
            console.log(res);
        })
        // 销毁定位,销毁定位会销毁插件内置的定位客户端对象,而停止定位只是停止定位而已。
        that.L_Amap.destroyLocation();
        that.L_Amap = null;
    }
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 用于提高GPS定位速度 --> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" /> <!--如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限--> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明--> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <!--如果设置忽略电池优化,需要增加这个权限--> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/> <!-- 如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机制。--> <uses-permission android:name="android.permission.DEVICE_POWER" tools:ignore="ProtectedPermissions" /> <!--定时唤醒CPU--> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

1、插件不采集任何数据。 2、插件定位功能使用高德定位SDK,参考其官方网站 https://lbs.amap.com/ 3、插件定位功能使用高德定位SDK,启动时需要获取网络状态、访问Wi-Fi状态、位置信息、访问粗略位置、访问精准定位、读取手机状态和身份,其隐私协议参考 https://lbs.amap.com/agreement/compliance

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问