参考文档:点这里

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

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

所以很尴尬,我就打算试试用报错里面提供的API去实现获取坐标功能,刚开始弄我发现文档里面的例子太少了,加上百度里面的例子也不多,所以就自己试着弄。

//这个函数是一开始点击事件触发的:
async authorization() {let self = thistry {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 = thiswx.openSetting({success(res) {console.log(res)if (res.authSetting["scope.userLocation"]) {// res.authSetting["scope.userLocation"]为trueb表示用户已同意获得定位信息,此时调用getlocation可以拿到信息self.authorization()}}})},

思路主要是这样的:首先事件触发authorization函数,等待getWxLocation函数里面的结果处理,看文档知道在调用onLocationChange前先调用startLocationUpdate

等待startLocationUpdate的成功回调打印一下内容,说明开启小程序进入前台时接收位置消息成功了

成功之后,在回调里面就可以调用onLocationChange去监听实时地理位置变化(注意:目前只有真机开启调试模式打印才能看到返回的坐标等参数,电脑调试暂时不行
获取之后要记得关闭实时监听wx.offLocationChange(_locationChangeFn),不然就会一直去获取坐标,可能会导致手机耗电严重。
如果是startLocationUpdate是失败回调的话:就去调用wx.openSetting申请用户的定位权限(scope.userLocation):参考文档

开启成功后就去再调一次authorization获取实时定位就好了!

在微信小程序中如何使用wx.onLocationChange(function callback)相关推荐

  1. 在微信小程序中如何使用wx.onLocationChange()【转载】

    参考文档:点这里 其实我使用这个挨批之前用的是wx.getLocation文档点这里 可是很无奈,产品的需求是要从首页点进去的时候获取一次用户坐标,可是如果用户频繁点击在真机上就会出现获取不到的情况, ...

  2. 微信小程序后台位置信息wx.onLocationChange实现间隔上报

    微信小程序中使用wx.startLocationUpdateBackground这个定位方式时,肯定要使用 wx.onLocationChange不间断的获取位置信息,但这个有两个问题:1.位置不变化 ...

  3. 微信小程序中常见的 typeof cb == “function” cb(that.globalData.userInfo)

    微信小程序官方demo以及很多代码中会在函数中经常出现 typeof cb == "function" && cb(that.globalData.userInfo ...

  4. 微信小程序中 wx:for=和wx:key=是什么关系

    微信小程序中一般都会要求有wx:for=""和wx:key=""两个都存在,不然会有警告 最简单的解释 wx:for="里面是要循环遍历的数组&quo ...

  5. 微信小程序中全局变量userInfo在其它页面不可用(wx.getUserInfo为异步获取信息)

    app.js中获取用户的openid和userinfo,并存储为全局变量,当在index中调用getApp().globalData.userInfo时却返回为空值: getUserInfo: fun ...

  6. 微信小程序中使用wx.navigateTo跳转时页面出现空白

    在微信小程序中当触发点击事件后跳转的页面时,跳转的页面出现空白,控制台报Page "pages/outline-xi/outline-xi" has not been regist ...

  7. 微信小程序setinterval_微信小程序中setInterval的使用方法

    微信小程序中setinterval的使用方法 看了下小程序的画布功能,简单的使用了一下,用蹩脚的逻辑做了个 "弹啊弹,弹走鱼尾纹的小球",一起来看下吧.过程不重要主要是画布的使用哦 ...

  8. Canvas绘图在微信小程序中的应用:生成个性化海报

    Canvas绘图在微信小程序中的应用:生成个性化海报 如极客时间的一些实现案例: 基础语法 Canvas本质是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素,默认大小为30 ...

  9. 微信小程序中this指向作用域问题this.setData is not a function报错

    在微信小程序中我们一般通过以下方式来修改data中的数据 this.setData({index1: e.detail.value}) 比如在函数里面修改数据 bindFaChange1: funct ...

最新文章

  1. 美妆彩妆宣传PPT模板
  2. 概率链接nbu 2416 奇怪的散步
  3. 老李案例分享:Weblogic性能优化案例
  4. tensorflow.reshap(tensor,shape,name)的使用说明
  5. [转][3DSMAX][贴图]如何检查遗失贴图
  6. linux 信号发生器,用STM32实现函数信号发生器
  7. BlueHost Gzip优化JS和CSS传输
  8. Ubuntu的多文件编译以及c语言的数组、函数
  9. 福建工程学院计算机专利,基于车床硬件平台的再制造数控滚齿机专利_专利查询 - 天眼查...
  10. java 获取xml 版本号_java解析xml获取对应值
  11. python列重命名_Python目录–创建,重命名,删除,列出,更改
  12. python requests text content_python 3 关于requests库的 text / content /json
  13. windows2003配置ftp服务器
  14. 3dmax渲染大图的过程中自动关闭怎么回事?
  15. JavaScript函数-创建参数个数不限数量的函数
  16. 【备忘录】浏览器不能上网但是微信能收到消息的一个解决办法
  17. python对图片颜色校正,使用Python PIL更改图像色调
  18. 机器学习做二元分类问题(二)
  19. bitnami redmine 4 windows一键式版本安装企业微信插件方法
  20. 快速校验非法字符工具

热门文章

  1. 大数据分析学习笔记(Z检验,分类器以及Association Rule)
  2. 概率模型——轧钢中的浪费、报童的诀窍
  3. (附源码)spring boot火车票订票系统 毕业设计171538
  4. 在日本做开发的日子(工作篇 富士通的第一周第一天)
  5. QFramework简介
  6. Linux系统编程 进程控制
  7. 从16K跳槽到20K,最后算下来年薪却还降了,我笑了····
  8. 22.5.4-简历修改
  9. 人生犹如登山,每一步都是一个高度
  10. Spine之二——认识界面