微信小程序用戶位置權(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),打開(kāi)地圖選擇位置
第一次調(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)向用戶請(qǐng)求過(guò)的權(quán)限,類似下面的樣子

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

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

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

其它的就沒(méi)有這問(wèn)題了。搞不懂。。。
總結(jié)
以上所述是小編給大家介紹的微信小程序用戶位置權(quán)限的獲取方法(拒絕后提醒),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JS Array.slice 截取數(shù)組的實(shí)現(xiàn)方法
這篇文章主要介紹了JS Array.slice 截取數(shù)組的實(shí)現(xiàn)方法,因?yàn)槲覀冃枰刂埔幌麻L(zhǎng)度,需要的朋友可以參考下2016-01-01
在一個(gè)頁(yè)面重復(fù)使用一個(gè)js函數(shù)的方法詳解
下面小編就為大家?guī)?lái)一篇在一個(gè)頁(yè)面重復(fù)使用一個(gè)js函數(shù)的方法詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦2016-12-12
js實(shí)現(xiàn)select跳轉(zhuǎn)功能代碼
實(shí)現(xiàn)select跳轉(zhuǎn)的方法有很多,本例為大家介紹的是js實(shí)現(xiàn)的,通過(guò)location.href獲取跳轉(zhuǎn)地址,需要的朋友可以看看2014-10-10
threejs太陽(yáng)光與陰影效果實(shí)例代碼
在Threejs中類似于我們現(xiàn)實(shí)世界,物體顯示的顏色是由物體本身的顏色及光照的顏色相互疊加而得到的,這篇文章主要給大家介紹了關(guān)于threejs太陽(yáng)光與陰影效果的相關(guān)資料,需要的朋友可以參考下2022-04-04
JS實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法分析
這篇文章主要介紹了JS實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法,結(jié)合實(shí)例形式分析了javascript字符串使用reverse方法、字符串遍歷方法以及針對(duì)輸入字符串的遍歷、逆序輸出等方法實(shí)現(xiàn)字符串反轉(zhuǎn)相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
原生JavaScript再網(wǎng)頁(yè)實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音功能
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)原生JavaScript再網(wǎng)頁(yè)實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2025-03-03

