更新记录
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:支持 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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 启动定位
注意事项
- 后台定位:应用进入后台时开启后台定位,进入前台时关闭后台定位;
- 开启后台定位时,系统通知栏会显示应用“正在后台运行”的通知;
- 关闭后台定位后,通知销毁。
- 前台服务:开启后应用始终在前台运行。运行标志:系统通知栏会显示应用“正在持续定位”的通知;
- 应用销毁或关闭定位,则销毁前台服务。
- 室内没有GPS信号,涉及室内场景时,慎重开启GPS优先功能,因为开启后定位过程变慢,容易定位超时。
- 设置是否优先返回GPS定位结果,如果30秒内GPS没有返回定位结果则进行网络定位,只有在高精度模式下的单次定位有效,其他方式无效
- 设置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 停止定位
- 停止定位后,需进行销毁操作,才能重新启动定位。
stopLocation(res=>{ console.log(res); res={ "message": "定位停止", "code": 0 } })
2.3 销毁定位
- 应用销毁时,会自动销毁定位,因此需要在进入app的时候(onLaunch时),重新检测权限并开启定位服务
- 建议退出登录时,手动销毁定位,在登录页面,重新检测权限并开启定位服务
destroyLocation();
2.4 手动开启后台定位
-
部分机型在startLocation()方法中启动后台定位无效,
-
则需用户在startLocation()中将enableBackgroundLocation设置为false后,手动启动后台定位。
-
在App.vue文件的onShow()方法中开启后台定位。
openBackgroundLocation(res=>{ console.log(res); });
2.5 手动关闭后台定位
- 在App.vue文件的onHide()方法中关闭后台定位
closeBackgroundLocation(res=>{ console.log(res); });
3、其他接口
3.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
- 取值范围:【0,360】,其中0度表示正北方向,90度表示正东,180度表示正南,270度表示正西
- 3.1.0之前的版本只有定位类型为 AMapLocation.LOCATION_TYPE_GPS时才有值
- 自3.1.0版本开始,不限定定位类型,当定位类型不是AMapLocation.LOCATION_TYPE_GPS时,
- 可以通过 AMapLocationClientOption.setSensorEnable(boolean) 控制是否返回方向角,
- 当设置为true时会通过手机传感器获取方向角,如果手机没有对应的传感器会返回0.0
- 注意:
- 定位类型为AMapLocation.LOCATION_TYPE_GPS(即响应码=1)时,方向角指的是运动方向
- 定位类型不是AMapLocation.LOCATION_TYPE_GPS(即响应码=1)时,方向角指的是手机朝向
4.2 provider 定位提供者
- lbs:高德网络定位
- gps:卫星定位
4.3 coordType 坐标系类型
- GCJ02:AMapLocation.COORD_TYPE_GCJ02坐标系
- 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 ~ 100],值越大在在室内的可能性越大
- 室外:且置信度取值在[-100 ~ -1] ,值越小在在室内的可能性越大
- 无法识别室内外:置信度返回值为 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
- 3.1.0之前的版本只有定位类型为 AMapLocation.LOCATION_TYPE_GPS时才有值
- 自3.1.0版本开始,不限定定位类型,当定位类型不是AMapLocation.LOCATION_TYPE_GPS时,
- 可以通过 AMapLocationClientOption.setSensorEnable(boolean) 控制是否返回速度值,
- 当设置为true时会通过手机传感器获取速度,如果手机没有对应的传感器会返回0.0
4.10 gpsAccuracyStatus 获取卫星信号强度,仅在卫星定位时有效,
响应码 | 描述 |
---|---|
0 | GPS_ACCURACY_BAD |
1 | GPS_ACCURACY_GOOD |
-1 | GPS_ACCURACY_UNKNOWN |
4.11 locationQuality 定位质量报告
- AdviseMessage: 获取提示语义,状态良好时,返回的是内容为空 根据当前的质量报告,给出相应的建议
- GPSSatellites: 获取当前的卫星数, 只有在非低功耗模式下此值才有效
- GPSStatus: 获取卫星状态信息,只有在非低功耗模式下此值才有效
- NetUseTime: 获取网络定位时的网络耗时 单位:毫秒
- NetworkType: 获取网络连接类型(2G、3G、4G、WIFI)
- isInstalledHighDangerMockApp: 是否安装了高危位置模拟软件,首次定位可能没有结果
- 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;
}
}