getLocation:fail 频繁调用会增加电量损耗的解决办法

微信小程序中频繁使用wx.getLocation可能导致电量损耗。官方从2.17.0版本开始对其进行频率限制,30s内仅首次调用有效。为实现实时定位,推荐使用wx.onLocationChange,并配合节流方法,例如每5s更新一次经纬度,以减少无效调用并优化用户体验。

在微信小程序中,我们使用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);
          },
        });
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值