这两天在做小程序调取地图的时候遇到一个问题,如果用户第一次拒绝了位置权限请求。那么就不会再次唤起授权弹出。需要我们引导用户去开启。

具体做法如下。
aap.json中加入授权配置

"permission": {    "scope.userLocation": {      "desc": "你的位置信息将用于小程序位置接口的效果展示"    }  }

在 page页面中使用,需要有几个注意的地方,初次使用的时候,去申请权限。这里我是放在onShow 方法里面。

 onShow: function () {    //初始获取定位权限    wx.authorize({      scope: 'scope.userLocation',      success: (res) => {             },    })  },

然后在调用地图地位。或者获取用户权限的函数去判断是否有定位权限,如果没有那么引导用户开启权限。
如下:我有一个Input去触发选择地图事件。

<input bindfocus="openMap" value='{{address}}'  placeholder="点击选择详细地址"></input>

事件处理

 openMap:function(e){    var that = this    wx.getSetting({        success(res){        //这里判断是否有地位权限          if (!res.authSetting['scope.userLocation']) {            wx.showModal({              title: '提示',              content: '请求获取位置权限',              success:function(res){               if(res.confirm==false){                  return false;                }                wx.openSetting({                  success(res) {                    //如果再次拒绝则返回页面并提示                    if (!res.authSetting['scope.userLocation']) {                      wx.showToast({                        title: '此功能需获取位置信息,请重新设置',                        duration: 3000,                        icon: 'none'                      })                    } else {                      //允许授权,调用地图                      that.chooseMap()                    }                  }                })              }            })           } else {          //如果有定位权限,调用地图            that.chooseMap()          }        }          })  },      chooseMap(){    var that = this    wx.chooseLocation({      success: function (res) {        that.setData({          address: res.address,          latitude: res.latitude,          longitude: res.longitude        })      },      fail: function (res) {        console.log(res)      }    })  },

原文地址