首先在app.config.json中配置
requiredBackgroundModes: [
'location'
],
requiredPrivateInfos: [
'getLocation',
'onLocationChange',
'startLocationUpdate',
],
permission: {
'scope.userLocation': {
desc: '你的位置信息将用于小程序位置接口的效果展示',
},
},
方法调用:
let registerOnlyOnceFlag = false;
let currentLat = 0; // 当前lat,用于判断位置变化则调用存储接口
useDidShow(() => {
getUserLocationFunc();
});
const getUserLocationFunc = () => {
Taro.startLocationUpdate({
success: (res) => {
console.log('定位成功', res);
onLocationChangeFunc()
},
fail: (err) => {
Taro.showModal({
title: '获取定位失败,请重新授权',
content: '',
success: (res) => {
if (res.confirm) {
Taro.openSetting()
} else {
// 容错处理
// Taro.switchTab({
// url: '/pages/home/index'
// })
}
}
})
}
})
}
const listener = (result) => {
console.log('listener---result', result)
const { latitude, longitude } = result;
// 此处存一下,以下代码 本项目是将定位存储再使用,所以多了一层判断,可忽略以下代码
if (currentLat !== latitude) {
console.log('save api')
saveUserPosition({ latitude, longitude, id: userId })
currentLat = latitude;
}
}
// 页面隐藏时停止定位
useDidHide(() => {
Taro.stopLocationUpdate({
success: () => {
console.log('success')
},
fail: (err) => {
console.log('err', err)
}
})
Taro.offLocationChange(listener);
});
const onLocationChangeFunc = () => {
if (!registerOnlyOnceFlag) {
registerOnlyOnceFlag = true; // 页面刷新后重新注册,否则无需注册多次
Taro.onLocationChange(listener);
}
}
标签:Taro,log,微信,实时,listener,onLocationChange,latitude,console,const
From: https://www.cnblogs.com/ZerlinM/p/17899144.html