在微信小程序中如何使用wx.onLocationChange(),解决wx.getLocation高频率调用导致耗电问题

其实我使用这个挨批之前用的是wx.getLocation

可是很无奈,产品的需求是要从首页点进去的时候获取一次用户坐标,可是如果用户频繁点击在真机上就会出现获取不到的情况,会报以下的错误,如下图所示
在这里插入图片描述

//这个函数是一开始点击事件触发的:
async authorization() {
    let self = this
    try {
      await this.getWxLocation()//等待
    } catch (error) {
      Model({
        title: '温馨提示',
        tip: '获取权限失败,需要获取您的地理位置才能为您提供更好的服务!是否授权获取地理位置?',
        showCancel: true,
        confirmText: '前往设置',
        cancelText: '取消',
        sureCall() {
          self.toSetting()
        },
        cancelCall() {}
      })
      return
    }
  },
  
  getWxLocation() {
    wx.showLoading({
      title: '定位中...',
      mask: true,
    })
    return new Promise((resolve, reject) => {
      let _locationChangeFn = (res) => {
        console.log('location change', res)
        Storage.set('userLocation', res)
        this.getList();
        wx.hideLoading()
        wx.offLocationChange(_locationChangeFn)
      }
      wx.startLocationUpdate({
        success: (res) => {
          console.log(res);
          wx.onLocationChange(_locationChangeFn)
          resolve()
        },
        fail: (err) => {
          console.log('获取当前位置失败', err)
          wx.hideLoading()
          reject()
        }
      })
    })
  },
  toSetting() {
    let self = this
    wx.openSetting({
      success(res) {
        console.log(res)
        if (res.authSetting["scope.userLocation"]) {
          // res.authSetting["scope.userLocation"]为trueb表示用户已同意获得定位信息,此时调用getlocation可以拿到信息
          self.authorization()
        }
      }
    })
  },

思路主要是这样的:首先事件触发authorization函数,等待getWxLocation函数里面的结果处理,看文档知道在调用onLocationChange前先调用startLocationUpdate
在这里插入图片描述
在这里插入图片描述
成功之后,在回调里面就可以调用onLocationChange去监听实时地理位置变化(注意:目前只有真机开启调试模式打印才能看到返回的坐标等参数,电脑调试暂时不行
获取之后要记得关闭实时监听wx.offLocationChange(_locationChangeFn),不然就会一直去获取坐标,可能会导致手机耗电严重。
如果是startLocationUpdate是失败回调的话:就去调用wx.openSetting申请用户的定位权限(scope.userLocation):参考文档
在这里插入图片描述
开启成功后就去再调一次authorization获取实时定位就好了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值