技術文章
      微信小程序之獲取用戶位置權限(拒絕后提醒)
      發布日期:2019-06-18 閱讀次數:2417 字體大?。?a href="javascript:;" onclick="ChangeFontSize('content',16)">大

      微信小程序獲取用戶當前位置有三個方式:

      1. wx.getLocation(多與wx.openLocation一起用)
        獲取當前的精度、緯度、速度。不需要授權。當type設置為gcj02 返回可用于wx.openLocation的坐標
      2. wx.chooseLocation
        需要授權,打開地圖選擇位置

        第一次調用方法時先出現

            

        

        允許權限之后之后再出現

        

             

        如果第一次就不允許,則一直調用wx.chooseLocation的fail方法

       3. wx.openLocation

        需要授權,使用微信內置地圖查看位置。多半用于查看起點到終點的路線怎么走

        

            

       授權方法有三種:

      1. wx.getSetting
        獲取用戶的當前設置,返回值中只會出現小程序已經向用戶請求過的權限,類似下面的樣子

        

           

      2. wx.openSetting

        調起權限設置選擇界面,設置界面只會出現小程序已經向用戶請求過的權限,類似下面的樣子

        

            

         

       3. wx.authorize

        提前向用戶發起授權請求。調用后會立刻彈窗詢問用戶是否同意授權小程序使用某項功能或獲取用戶的某些數據,但不會實際調用對應接口。如果用戶之前已經同意授權,則不會出現彈窗,直接返回成功。,類似下面的樣子

        

             

        這就是wx.authorize出現的內容

       

      問題來了:假如我第一次使用wx.chooseLocation()獲取權限被拒絕,然后使用wx.getSetting()來重新獲取權限該怎么做呢?

      思路:wx.chooseLocation()有fail方法,如果第一次拒絕之后,以后調用選擇地圖都是觸發的這個,那么我可以在fail方法里面,使用wx.getSetting(),這樣就每次都能判斷是否已經給與了權限了。

      第一步:由于有可能會多次使用定位的方法,所以我把定位的方法寫到App.js中,方便調用

      復制代碼
      App({
          //獲取用戶地理位置權限
          getPermission:function(obj){
            wx.chooseLocation({
              success: function (res) {    
                  obj.setData({
                      addr: res.address      //調用成功直接設置地址
                  })                
              },
              fail:function(){
                  wx.getSetting({
                      success: function (res) {
                          var statu = res.authSetting;
                          if (!statu['scope.userLocation']) {
                              wx.showModal({
                                  title: '是否授權當前位置',
                                  content: '需要獲取您的地理位置,請確認授權,否則地圖功能將無法使用',
                                  success: function (tip) {
                                      if (tip.confirm) {
                                          wx.openSetting({
                                              success: function (data) {
                                                  if (data.authSetting["scope.userLocation"] === true) {
                                                      wx.showToast({
                                                          title: '授權成功',
                                                          icon: 'success',
                                                          duration: 1000
                                                      })
                                                      //授權成功之后,再調用chooseLocation選擇地方
                                                      wx.chooseLocation({
                                                          success: function(res) {
                                                              obj.setData({
                                                                  addr: res.address
                                                              })
                                                          },
                                                      })
                                                  } else {
                                                      wx.showToast({
                                                          title: '授權失敗',
                                                          icon: 'success',
                                                          duration: 1000
                                                      })
                                                  }
                                              }
                                          })
                                      }
                                  }
                              })
                          }
                      },
                      fail: function (res) {
                          wx.showToast({
                              title: '調用授權窗口失敗',
                              icon: 'success',
                              duration: 1000
                          })
                      }
                  })
              }
          })        
         },
      })    
      復制代碼
        第二步:在需要獲取地址的頁面中:

      復制代碼
      var app = getApp();
      Page({
         data:{
              addr:'請選擇位置'         
          },
          //選擇獲取地理位置
          getAddress:function(){
                var that=this;
            app.getPermission(that);    //傳入that值可以在app.js頁面直接設置內容    
          }, 
      })
      復制代碼
       最終效果圖:

       最終在手機上獲取到的位置偏差不太大。

      主站蜘蛛池模板: 日本黄色电影在线| 99久热任我爽精品视频| 欧美系列第一页| 国产 欧洲韩国野花视频| 69久久夜色精品国产69| 极品一线天馒头lj| 国产乱人伦偷精品视频| 91精品综合久久久久久五月天| 日韩精品无码中文字幕一区二区| 人人狠狠综合久久亚洲| 西西人体大胆扒开瓣| 尹人香蕉网在线观看视频| 五月婷婷丁香网| 美女巨胸喷奶水视频www免费| 国产激情一区二区三区在线观看| hqsexmovie| 欧美jizz18性欧美年轻| 你懂的国产精品| 色屁屁影视大全| 在线观看中文字幕国产| 五月婷婷亚洲综合| 毛片在线免费播放| 卡一卡二卡三精品| 韩国无遮挡羞羞漫画| 国产精品亚洲欧美大片在线观看| 中文字幕高清在线| 欧美黑人xxxx性高清版| 国产午夜电影在线观看不卡| 67pao强力打造国产免费| 嫩草成人永久免费观看| 久久久亚洲欧洲日产国码aⅴ| 波多野结衣视频在线免费观看| 四虎影视www四虎免费| 黄色网在线播放| 女人与狥交下配a级正在播放| 久久久2019精品| 极品人体西西44f大尺度| 亚洲欧美一区二区三区孕妇| 精品一区二区三区AV天堂| 国产乱子伦农村叉叉叉| 91黑丝国产线观看免费|