高德持续定位插件,支持后台定位、前台服务、安卓保活

0、下载地址

高德持续定位插件,支持后台定位、安卓保活 - DCloud 插件市场

注意事项:仅支持HbuilderX 3.3.7及以上版本。

1、权限相关接口

1.1 权限检测

checkPermission({
    checkGPS: true, //检测GPS是否开启
    checkLocation: true, //检测基础定位服务是否开启
    checkBackLocation: true, //检测后台定位是否开启
    checkWakeLock: true, //检测屏幕唤醒是否开启
    checkBattery: true, //检测是否加入电池优化白名单
    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,
        "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 设置是否忽略电池优化

setBatteryOptimizations(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、定位相关接口

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,可选
    },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定位失败请通过错误码参考错误码对照表进行问题排查。
1GPS定位结果通过设备GPS定位模块返回的定位结果,精度较高,在10米-100米左右
2前次定位结果网络定位请求低于1秒、或两次定位之间设备位置变化非常小时返回,设备位移通过传感器感知。
4缓存定位结果返回一段时间前设备在同样的位置缓存下来的网络定位结果
5Wifi定位结果属于网络定位,定位精度相对基站定位会更好,定位精度较高,在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 获取卫星信号强度,仅在卫星定位时有效,

响应码描述
0GPS_ACCURACY_BAD
1GPS_ACCURACY_GOOD
-1GPS_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;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值