方案一

  1. wx.getSetting({
  2. success(res) {
  3. console.log('wx.getSetting:', res)
  4. /**
  5. * res.authSetting['scope.userLocation'] === true 同意过授权
  6. * res.authSetting['scope.userLocation'] === false 拒绝过授权
  7. * res.authSetting['scope.userLocation'] === undefined 从未同意或者拒绝过授权
  8. */
  9. if (res.authSetting['scope.userLocation'] === undefined) {
  10. wx.authorize({
  11. scope: 'scope.userLocation',
  12. success (res) {
  13. console.log('authorize success:', res)
  14. },
  15. })
  16. }else if (res.authSetting['scope.userLocation'] === false) {
  17. wx.showModal({
  18. title: '',
  19. content: '去小程序设置页面设置balabala',
  20. showCancel: true,
  21. cancelText: '取消',
  22. cancelColor: '#000000',
  23. confirmText: '确定',
  24. confirmColor: '#3CC51F',
  25. success: (result) => {
  26. if(result.confirm){
  27. wx.openSetting({
  28. success (res) {
  29. console.log('wx.openSetting success:', res.authSetting)
  30. },
  31. fail: (err)=>{
  32. console.log('wx.openSetting fail:', err)
  33. },
  34. complete: (info)=>{
  35. console.log('wx.openSetting complete:', info)
  36. },
  37. })
  38. }
  39. },
  40. })
  41. } else {
  42. wx.getLocation({
  43. type: 'wgs84',
  44. success (res) {
  45. console.log('wx.location success:', res)
  46. },
  47. fail (err) {
  48. console.log('wx.location fail:', err)
  49. },
  50. complete(aa) {
  51. console.log('wx.location complete:', aa)
  52. },
  53. })
  54. }
  55. },
  56. })

注意事项:
1、wx.openSetting

只显示小程序已经向用户申请过的权限

2、wx.getSetting

返回值中只会出现小程序已经向用户申请过的权限

3、app.json文件中配置位置信息的用途说明

  1. "permission": {
  2. "scope.userLocation": {
  3. "desc": "您的位置信息将用于定位"
  4. }
  5. }

4、对于用户拒绝授权的情况调用wx.openSetting跳转小程序设置页面,引导用户手动开启该权限

方案二

1.当用户进入页面,开始判断用户之前是否授权;
2.如果已授权 直接获取位置信息;反之,弹框要求用户授权,
3.当用户点击确定 进入小程序授权设置界面 打开位置权限,
4.授权方法 必须写到onShow 中(便于实时监测用户是否关闭位置权限)

  1. onShow() {
  2. //检测用户是否之前授权
  3. wx.getSetting({
  4. success(res) {
  5. if (!res.authSetting['scope.userLocation']) {
  6. wx.authorize({
  7. scope: 'scope.userLocation',
  8. success() {},
  9. fail() {
  10. wx.showModal({
  11. title: '小程序要获取你的地理位置',
  12. content: '你的位置信息将用于小程序位置接口的效果展示',
  13. success(res) {
  14. if (res.confirm) {
  15. wx.openSetting({
  16. success() {
  17. wx.getLocation({
  18. type: 'wgs84',
  19. success(res3) {
  20. console.log(res3)
  21. }
  22. })
  23. }
  24. })
  25. }
  26. }
  27. })
  28. },
  29. })
  30. }
  31. }
  32. })
  33. wx.startLocationUpdate({}) //开启小程序进入前台时接收位置消息
  34. // 获取当前位置信息
  35. let that = this
  36. wx.getLocation({
  37. type: 'gcj02',
  38. isHighAccuracy: true,
  39. success(res3) {
  40. console.log(res3)
  41. that.setData({
  42. location: res3
  43. })
  44. }
  45. })
  46. // 打开当前位置
  47. wx.openLocation({
  48. latitude: this.data.location.latitude,
  49. longitude: this.data.location.longitude,
  50. scale: 18
  51. })
  52. // 选择位置
  53. wx.chooseLocation({
  54. latitude: this.data.location.latitude,
  55. longitude: this.data.location.longitude,
  56. success(res) {
  57. console.log(res)
  58. },
  59. })
  60. }