在微信小程序中,我们使用wx.getLocation api来获取经纬度的时候,会进行报错提示:
getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
在这里,官方文档已经给出了提示:

从基础库2.17.0版本开始,将会对getLocation 接口进行频率限制,包括在开发版本和体验版本中,30s内调用除第一次后,剩余返回fail。但是在正式版本中将不会走fail块,剩余会返回与第一次定位相同的信息。此处带来的限制是在30s内只会触发一次来限制频率,所以不需要太担心,并不会影响业务逻辑(经测试,在最新的版本库,开发环境下,如果不采取bindtap的方式来调用,只是在onshow里面调用,不会调用失败,线上没有测试过。)
若需要实时的来监听,那么则不采取wx.getLocation,需要使用 wx.onLocationChange。用法如下:
注册wx.onLocationChange方法:这里使用了节流方法,因为经纬度实时的,改变时刻都在触发,这里改为每过5s去将经纬度存在guiji数组。
wx.onLocationChange((res) => {
//每次当位置变化的时候触发
if (!_this.flag) {
//只有flag为true才触发
return false;
}
_this.flag = false;
setTimeout(() => {
_this.flag = true; //只有当延时走完后才会flag才会为true
_this.globalData.guiji.push({
longitude: res.longitude,
latitude: res.latitude,
});
console.log(
res.longitude,
res.latitude,
"每过5s钟设置一下经纬度",
"经度",
"纬度"
);
}, 5000);
});
开启定位追踪,当地址位置变化时触发 wx.onLocationChange
wx.startLocationUpdate({
success: (res) => {},
fail: (err) => {
console.log(err);
},
});
关闭定位追踪:
wx.stopLocationUpdate({
success: (res) => {
console.log("停止追踪", res);
},
fail: (err) => {
console.log(err);
},
});
微信小程序中频繁使用wx.getLocation可能导致电量损耗。官方从2.17.0版本开始对其进行频率限制,30s内仅首次调用有效。为实现实时定位,推荐使用wx.onLocationChange,并配合节流方法,例如每5s更新一次经纬度,以减少无效调用并优化用户体验。
7975

被折叠的 条评论
为什么被折叠?



