微信小程序用戶位置權(quán)限的獲取方法(拒絕后提醒)
微信小程序獲取用戶當(dāng)前位置有三個(gè)方式:
1. wx.getLocation(多與wx.openLocation一起用)
獲取當(dāng)前的精度、緯度、速度。不需要授權(quán)。當(dāng)type設(shè)置為gcj02 返回可用于wx.openLocation的坐標(biāo)
2. wx.chooseLocation
需要授權(quán),打開地圖選擇位置
第一次調(diào)用方法時(shí)先出現(xiàn)

允許權(quán)限之后之后再出現(xiàn)

如果第一次就不允許,則一直調(diào)用wx.chooseLocation的fail方法
3. wx.openLocation
需要授權(quán),使用微信內(nèi)置地圖查看位置。多半用于查看起點(diǎn)到終點(diǎn)的路線怎么走

授權(quán)方法有三種:
1. wx.getSetting
獲取用戶的當(dāng)前設(shè)置,返回值中只會(huì)出現(xiàn)小程序已經(jīng)向用戶請求過的權(quán)限,類似下面的樣子

2. wx.openSetting
調(diào)起權(quán)限設(shè)置選擇界面,設(shè)置界面只會(huì)出現(xiàn)小程序已經(jīng)向用戶請求過的權(quán)限,類似下面的樣子

3. wx.authorize
提前向用戶發(fā)起授權(quán)請求。調(diào)用后會(huì)立刻彈窗詢問用戶是否同意授權(quán)小程序使用某項(xiàng)功能或獲取用戶的某些數(shù)據(jù),但不會(huì)實(shí)際調(diào)用對應(yīng)接口。如果用戶之前已經(jīng)同意授權(quán),則不會(huì)出現(xiàn)彈窗,直接返回成功。,類似下面的樣子
這就是wx.authorize出現(xiàn)的內(nèi)容
問題來了:假如我第一次使用wx.chooseLocation()獲取權(quán)限被拒絕,然后使用wx.getSetting()來重新獲取權(quán)限該怎么做呢?
思路:wx.chooseLocation()有fail方法,如果第一次拒絕之后,以后調(diào)用選擇地圖都是觸發(fā)的這個(gè),那么我可以在fail方法里面,使用wx.getSetting(),這樣就每次都能判斷是否已經(jīng)給與了權(quán)限了。
第一步:由于有可能會(huì)多次使用定位的方法,所以我把定位的方法寫到App.js中,方便調(diào)用
App({
//獲取用戶地理位置權(quán)限
getPermission:function(obj){
wx.chooseLocation({
success: function (res) {
obj.setData({
addr: res.address //調(diào)用成功直接設(shè)置地址
})
},
fail:function(){
wx.getSetting({
success: function (res) {
var statu = res.authSetting;
if (!statu['scope.userLocation']) {
wx.showModal({
title: '是否授權(quán)當(dāng)前位置',
content: '需要獲取您的地理位置,請確認(rèn)授權(quán),否則地圖功能將無法使用',
success: function (tip) {
if (tip.confirm) {
wx.openSetting({
success: function (data) {
if (data.authSetting["scope.userLocation"] === true) {
wx.showToast({
title: '授權(quán)成功',
icon: 'success',
duration: 1000
})
//授權(quán)成功之后,再調(diào)用chooseLocation選擇地方
wx.chooseLocation({
success: function(res) {
obj.setData({
addr: res.address
})
},
})
} else {
wx.showToast({
title: '授權(quán)失敗',
icon: 'success',
duration: 1000
})
}
}
})
}
}
})
}
},
fail: function (res) {
wx.showToast({
title: '調(diào)用授權(quán)窗口失敗',
icon: 'success',
duration: 1000
})
}
})
}
})
},
})
第二步:在需要獲取地址的頁面中:
var app = getApp();
Page({
data:{
addr:'請選擇位置'
},
//選擇獲取地理位置
getAddress:function(){
var that=this;
app.getPermission(that); //傳入that值可以在app.js頁面直接設(shè)置內(nèi)容
},
})
最終效果圖:

最終在手機(jī)上獲取到的位置偏差不太大。
--------------------------------------------------------------------------------
更新 wx.openSetting 的注意事項(xiàng)。
2.3.0 版本開始,用戶發(fā)生點(diǎn)擊行為后,才可以跳轉(zhuǎn)打開設(shè)置頁,管理授權(quán)信息
即2.3.0版本之后,我通過上面的wx.showModal的回調(diào)函數(shù)來調(diào)用wx.openSetting 會(huì)發(fā)生下面的錯(cuò)誤:
openSetting:fail can only be invoked by user TAP gesture.
但是我測試 2.2.4 開始 到2.3.1 都會(huì)出現(xiàn)上面這種錯(cuò)誤。
2.3.2及以上又不會(huì)出現(xiàn)這種問題。。。。。。。。
而且當(dāng)我測試2.0.8 到 2.2.3 會(huì)出現(xiàn)下面的錯(cuò)誤。。。。。。

其它的就沒有這問題了。搞不懂。。。
總結(jié)
以上所述是小編給大家介紹的微信小程序用戶位置權(quán)限的獲取方法(拒絕后提醒),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解TypeScript中的箭頭函數(shù)如何實(shí)現(xiàn)重載
這篇文章主要為大家詳細(xì)介紹了TypeScript中的箭頭函數(shù)是如何實(shí)現(xiàn)重載的,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以參考一下2023-05-05
3種js實(shí)現(xiàn)string的substring方法
這篇文章主要介紹了3種javascript實(shí)現(xiàn)string的substring方法,需要的朋友可以參考下2015-11-11
使用JS判斷移動(dòng)端手機(jī)橫豎屏狀態(tài)
本文通過js和cas代碼分別給大家介紹了移動(dòng)端判斷手機(jī)橫豎屏狀態(tài)的相關(guān)知識,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07
JavaScript使用IEEE 標(biāo)準(zhǔn)進(jìn)行二進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生莫名錯(cuò)誤的解決方法
javascript做帶小數(shù)的計(jì)算時(shí),會(huì)出現(xiàn)9的循環(huán),以下方法幫助解決。2011-05-05
layui添加動(dòng)態(tài)菜單與選項(xiàng)卡 AJAX請求的例子
今天小編就為大家分享一篇layui添加動(dòng)態(tài)菜單與選項(xiàng)卡 AJAX請求的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09

