最新时时彩平台演示 中新时时彩要不要交税 新时时彩三星组六技巧 最新时时彩源码修改 新时时彩遗漏走势图 新时时彩预测方法 新时时彩计算器 新时时彩开奖皇冠网址 新时时彩组三怎么玩 最新时时彩后四稳赚 新时时彩官方开奖网站 新时时彩人工计划 新时时彩开奖漏洞 新时时彩最长遗漏 新时时彩中奖顺序 360新时时彩技巧-轴承资讯 新时时彩停售 最新时时彩杀号高手 新时时彩三星走势图 玩新时时彩有什么技巧 新时时彩3星和尾走势 新时时彩后一公式 重新时时彩网站 新时时彩遗漏统计软件 吉林新时时彩走势图 新时时彩中奖怎么查 新时时彩是什么地方 新时时彩中奖怎么查 新时时彩下载手机版下载 新时时彩贴吧 最新时时彩计划软件 大赢家新时时彩 新时时彩注册送彩金 新时时彩组选投注技巧 新时时彩走势图 新时时彩万能5码 新时时彩模拟 新疆新时时彩往期开奖号码 新时时彩的玩法 新时时彩稳赚计划 最新时时彩70注 新时时彩返奖率 新时时彩杀号定胆360 新时时彩后二杀号 新时时彩振幅走势 最新时时彩教程 新时时彩后台软件 新时时彩几点开始 新时时彩日赚几百 最新时时彩注册送20
用户
 ?#19968;?#23494;码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 查看内容

微信小程序之获取用户位置权限(拒绝后提醒)

Rolan 2019-3-20 00:32

微信小程序获取用户当前位置有三个方式:1. wx.getLocation(多与wx.openLocation一起用)  获取当前的精?#21462;?#32428;?#21462;?#36895;?#21462;?#19981;需要授权。当type设置为gcj02 返回可用于wx.openLocation的坐标2. wx.chooseLocation  ...

1. wx.getLocation(多与wx.openLocation一起用)

  获取当前的精?#21462;?#32428;?#21462;?#36895;?#21462;?#19981;需要授权。当type设置为gcj02 返回可用于wx.openLocation的坐标

2. wx.chooseLocation

  需要授权,打开地图选择位置

  第一次调用方法时先出现

  允许权限之后之后再出现

  如果第一次就不允许,则一直调用wx.chooseLocation的fail方法

3. wx.openLocation

  需要授权,使用微信内置地图查看位置。多半用于查看起点到终点的路线怎么走

授权方法有三种:

1. wx.getSetting

  获取用户的当前设置,返回值中只会出现小程序已经向用户请求过的权限,类似下面的样子

2. wx.openSetting

  调起权限设置选择界面,设置界面只会出现小程序已经向用户请求过的权限,类似下面的样子

3. wx.authorize

  提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会?#23548;?#35843;用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。,类似下面的样子

  这就是wx.authorize出现的内容

问题来了:假如我第一?#38382;?#29992;wx.chooseLocation()获取权限被拒绝,然后使用wx.getSetting()来重新获取权限该怎么做呢?

思路:wx.chooseLocation()有fail方法,如果第一次拒绝之后,以后调用选择地?#32423;?#26159;触发的这个,那么我可以在fail方法里面,使用wx.getSetting(),这样就?#30475;?#37117;能判断是否已经给与了权限了。

第一步:由于有可能会多?#38382;?#29992;定位的方法,所以我?#35759;?#20301;的方法写到App.js中,方便调用

  1. App({
  2. //获取用户地理位置权限
  3. getPermission:function(obj){
  4. wx.chooseLocation({
  5. success: function (res) {
  6. obj.setData({
  7. addr: res.address //调用成功直接设置地址
  8. })
  9. },
  10. fail:function(){
  11. wx.getSetting({
  12. success: function (res) {
  13. var statu = res.authSetting;
  14. if (!statu['scope.userLocation']) {
  15. wx.showModal({
  16. title: '是否授权当前位置',
  17. content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用',
  18. success: function (tip) {
  19. if (tip.confirm) {
  20. wx.openSetting({
  21. success: function (data) {
  22. if (data.authSetting["scope.userLocation"] === true) {
  23. wx.showToast({
  24. title: '授权成功',
  25. icon: 'success',
  26. duration: 1000
  27. })
  28. //授权成功之后,再调用chooseLocation选择地方
  29. wx.chooseLocation({
  30. success: function(res) {
  31. obj.setData({
  32. addr: res.address
  33. })
  34. },
  35. })
  36. } else {
  37. wx.showToast({
  38. title: '授权失败',
  39. icon: 'success',
  40. duration: 1000
  41. })
  42. }
  43. }
  44. })
  45. }
  46. }
  47. })
  48. }
  49. },
  50. fail: function (res) {
  51. wx.showToast({
  52. title: '调用授权窗口失败',
  53. icon: 'success',
  54. duration: 1000
  55. })
  56. }
  57. })
  58. }
  59. })
  60. },
  61. })

第二步:在需要获取地址的页面中:

  1. var app = getApp();
  2. Page({
  3. data:{
  4. addr:'请选择位置'
  5. },
  6. //选择获取地理位置
  7. getAddress:function(){
  8. var that=this;
  9. app.getPermission(that); //传入that值可以在app.js页面直接设置内容
  10. },
  11. })

最终效果图:

最终在?#21482;?#19978;获取到的位置偏差不太大。

更新 wx.openSetting 的注意事项。

2.3.0 版本开始,用户发生点击行为后,才可以跳转打开设置页,管理授权信息

即2.3.0版本之后,我通过上面的wx.showModal的回调函数来调用wx.openSetting 会发生下面的错误:

openSetting:fail can only be invoked by user TAP gesture.

但是我测试 2.2.4 开始 到2.3.1 都会出现上面这种错误。

2.3.2及以上又不会出现这种问题。。。。。。。。

而且当我测试2.0.8 到 2.2.3 会出现下面的错误。。。。。。

其它的就没有这问题了。搞不懂。。。

鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏
原作者: 站住,别跑 来自: cnblogs
新时时彩软件
巴西森宝客服 3366小游戏龙珠激斗 1月25日灰熊vs火箭 数字大转轮登陆 篮网vs太阳 热那亚锡耶纳终端 布莱顿主客场球衣 幸运日试玩 内蒙古11选5遗漏 魔术箱怎么玩 mg冰球突破卡免费转 动物足球比赛图片