先上代码:
//监听地理位置变化
onLocationChange(res){
console.log('onLocationChange:', res)
},
//开始行程
transStart(){
wx.authorize({
scope: 'scope.userLocationBackground',
success: () => {
wx.onLocationChange(this.onLocationChange)
wx.startLocationUpdateBackground({
type: 'gcj02',
success: () => {
},
fail: e => { console.log('startLocationUpdateBackground fail:', e)}
})
},
fail: e => {
console.log('userLocationBackground denyed:', e)
}
})
},
//停止行程
transStop(){
wx.stopLocationUpdate()
wx.offLocationChange()
}
小程序appid:wx8da5a101b12742c0
已申请了实时定位和后台定位权限,隐私协议里也申明了位置使用权限。在首次调用时,会拉起用户授权弹窗,但若用户不小心点了拒绝后,有两种情况:
1.如果用户将选项勾选的是 【使用小程序时】,点拒绝后,可以再次申请拉起授权。
2.如果用户将选项勾选的是【使用小程序时和离开后】,点拒绝后,将无法再次拉起授权,后台是直接反馈的 authorize:fail auth deny, 也试过用openSetting引导用户去设置时根本没有这个后台运行定位的选项, 只能删除小程序后重新安装小程序,重新授权。
以上是在开发者工具中的。实际在iOS真机上,【使用小程序时】和 【使用小程序时和离开后】这两个选项误拒绝后都无法第二次拉起。
另,还有一个现象,在上面的iOS真机上授权后,可以正常获取到定位数据,但是微信切换到后台或熄屏后,定位数据就没有了,这与startLocationUpdateBackground的使用场景好像不符,是不是我调用方法有问题或是哪里还有设置未完成
用户拒绝授权后,本来就是无法再拉起授权的。建议仔细看文档,并不是bug。
但是后台定位的startLocationUpdateBackground,我使用起来当熄屏后就不能定位了,没有回调onLocationChange这个接口,这个跟文档上描述的功能不太一样啊