收藏
回答

wx.offLocationChange不起作用吗?

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug offLocationChange 微信安卓客户端 7.0.13 2.11.0

https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.offLocationChange.html

在停止的时候我是这样调用的:

但是wx.offLocationChange中没有打印内容,

再次启动的时候定位监听的时候,出现数据重复



回答关注问题邀请回答
收藏

4 个回答

  • 俊达
    俊达
    2020-06-01

    我也遇到题主同样的问题。

    经过研究,发现是微信文档中对函数的说明写法有问题。

    onLocationChange 应该是对“实时地理位置变化事件的回调函数”进行注册,只需要运行一次。

    我的解决办法:

    在 app.js 的 onLaunch 方法中,调用 

    wx.onLocationChange(function(res){
      console.log(res)
    })
    

    对位置变更事件进行注册。

    然后,在需要使用位置信息的页面中:

    onLoad function (options) {
      // 启动位置跟踪
      wx.startLocationUpdate({
        success: (res) => {
          console.log(res)
        },
        fail: (err) => {
          console.log(err)
        }
      })
    }
    
    onUnload: function () {
      // 停止位置跟踪
      wx.stopLocationUpdate({
        success: (res) => {
          console.log("onUnload stopLocationUpdate success", res)
        },
        fail: (err) => {
          console.log("onUnload stopLocationUpdate fail", err)
        }
      })
    }
    
    2020-06-01
    有用 6
    回复 1
    • 马南山
      马南山
      2021-09-27
      谢谢楼主!您的办法有效
      2021-09-27
      回复
  • Mr.H
    Mr.H
    03-27
    const listener = function (res) { console.log(res) }
    
    wx.onLocationChange(listener)
    wx.offLocationChange(listener) // 需传入与监听时同一个的函数对象
    
    wx.offLocationChange()  这个方法的参数,不是传关闭之后的回调函数,而是传递监听时的函数。也就是需要关闭的监听函数对象
    
    03-27
    有用
    回复
  • 于建波
    于建波
    2020-04-22

    机型:iphone 6,微信版本号:7.0.12,系统版本号(?基础版本库):2.10.4

    代码片段:https://developers.weixin.qq.com/s/jjg4yNm37lgk

    关键代码:

    测试结果:

    wx.offLocationChange的输出


    2020-04-22
    有用
    回复 11
    • 于建波
      于建波
      2020-04-22
      注销stopLocationUpdate后还是不会执行offLocationChange
      2020-04-22
      回复
    • 2020-04-26回复于建波
      你好,问题解决了吗
      2020-04-26
      回复
    • 于建波
      于建波
      2020-04-26回复
      还没有
      2020-04-26
      回复
    • 2020-04-27回复于建波
      1、我发现调用一次wx.startLocationUpdateBackground、wx.onLocationChange后,
      2、然后使用wx.stopLocationUpdate、wx.offLocationChange停止监听位置变化后,
      3、在重新开wx.startLocationUpdateBackground,wx.onLocationChange
      4、但是第一次的wx.onLocationChange会继续监听,所以会出现多次调用,就会数据重复,也就是wx.offLocationChange没起作用。
      不知道的是官方的bug,还是使用方法不对,反正试了好多次都不行

      所以我觉得可以换个办法:
      只有第一次调用开启wx.onLocationChange,然后只操作wx.startLocationUpdateBackground,wx.stopLocationUpdate
      这样数据不会重复了
      2020-04-27
      1
      回复
    • 于建波
      于建波
      2020-04-27回复
      好的,谢谢啊,我试试
      2020-04-27
      回复
    查看更多(6)
  • 是小白啊
    是小白啊
    2020-04-15

    麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2020-04-15
    有用
    回复 10
    • 于建波
      于建波
      2020-04-23
      机型:iphone 6,微信版本号:7.0.12,系统版本号(?基础版本库):2.10.4
      代码片段:https://developers.weixin.qq.com/s/jjg4yNm37lgk
      关键代码及输出结果如下:
      2020-04-23
      回复
    • 是小白啊
      是小白啊
      2020-04-23回复于建波
      测试没复现
      2020-04-23
      回复
    • 于建波
      于建波
      2020-04-23
      这个没有输出啊
      2020-04-23
      回复
    • 是小白啊
      是小白啊
      2020-04-24回复于建波
      未复现
      2020-04-24
      回复
    • 于建波
      于建波
      2020-04-24
      不好意思,我不知道是不是我看错了。我在您的回复中还是没有看到wx.offLocationChange的输出“关闭stopLocationUpdate时调用offLocationChange”
      2020-04-24
      回复
    查看更多(5)
登录 后发表内容
问题标签