若使用该接口,需要在 app.json 中进行声明
json
requiredPrivateInfos: [
'getLocation',
'onLocationChange',
'startLocationUpdate',
'startLocationUpdateBackground'
],
requiredBackgroundModes: [
'audio',
'location'
],
代码:
1、使用wx.startLocationUpdateBackground需要授权
2、搭配wx.onLocationChange api使用
javascript
/**
* 使用wx.startLocationUpdateBackground需要授权
*/
getAuth() {
const that = this
wx.getSetting({
success(res) {
console.log(1, res.authSetting['scope.userLocationBackground']);
// 如果没有拿到scope.userLocationBackground授权,提示
if (!res.authSetting['scope.userLocationBackground']) {
console.log('-------------');
wx.authorize({
scope: 'scope.userLocationBackground',
success() {
console.log(2);
// 用户已经同意,调用wx.startLocationUpdateBackground
wx.startLocationUpdateBackground({
success(res) {
console.log('startLocationUpdateBackgroundsuccess');
// 成功开启后台定位, 调用实时位置变更
that.openLocaionListener()
},
fail(res) {
console.log('startLocationUpdateBackgroundfail', res);
wx.showToast({
icon: 'error',
title: '开启后台定位失败'
})
}
})
},
fail(res) {
wx.showToast({
title: '授权失败,点击右上角设置位置为使用时和离开后!',
icon: 'none',
duration: 5000,
mask: true,
success: () => {
wx.navigateBack()
}
})
}
})
} else {
console.log(4);
// 已经拿到scope.userLocationBackground授权调用
wx.startLocationUpdateBackground({
success(res) {
console.log(5, res);
// 成功开启后台定位,
that.openLocaionListener()
},
fail(res) {
console.log(6, res);
wx.showToast({
icon: 'error',
title: '开启后台定位失败'
})
}
})
}
}
})
}
openLocaionListener() {
const that = this
console.log('openLocaionListener')
wx.onLocationChange((_res) => {
if (that.isUpdateLocation) {
that.isUpdateLocation = false
console.log('定位发生改变', _res, new Date())
const date = new Date()
const res = {
'result': _res,
'time': date
}
// const jsonStr = JSON.stringify(res)
// console.log(jsonStr);
wx.reportEvent('update_location', {
"data": res
})
}
})
let i = 0
console.log('updateLocationInterval', this.updateLocationInterval);
if (!this.updateLocationInterval) {
this.updateLocationInterval = setInterval(() => {
console.log(i++, new Date());
this.isUpdateLocation = true
}, 5000)
}
}