這篇文章給大家分享的是有關(guān)小程序怎樣獲取用戶當(dāng)前位置的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)公司不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對(duì)營(yíng)銷、技術(shù)、服務(wù)都有自己獨(dú)特見解,公司采取“創(chuàng)意+綜合+營(yíng)銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時(shí),也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級(jí),滿足企業(yè)一站式營(yíng)銷型網(wǎng)站需求,讓再小的成都品牌網(wǎng)站建設(shè)也能產(chǎn)生價(jià)值!
有三種方式可以獲取用戶當(dāng)前位置:
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)向用戶請(qǐng)求過的權(quán)限,類似下面的樣子
2、wx.openSetting
調(diào)起權(quán)限設(shè)置選擇界面,設(shè)置界面只會(huì)出現(xiàn)小程序已經(jīng)向用戶請(qǐng)求過的權(quán)限,類似下面的樣子
3、wx.authorize
提前向用戶發(fā)起授權(quán)請(qǐng)求。調(diào)用后會(huì)立刻彈窗詢問用戶是否同意授權(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)容
問題來了:假如我第一次使用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: '需要獲取您的地理位置,請(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 版本開始,用戶發(fā)生點(diǎn)擊行為后,才可以跳轉(zhuǎn)打開設(shè)置頁(yè),管理授權(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.
但是我測(cè)試 2.2.4 開始 到2.3.1 都會(huì)出現(xiàn)上面這種錯(cuò)誤。
2.3.2及以上又不會(huì)出現(xiàn)這種問題。。。。。。。。
而且當(dāng)我測(cè)試2.0.8 到 2.2.3 會(huì)出現(xiàn)下面的錯(cuò)誤。。。。。。
感謝各位的閱讀!關(guān)于“小程序怎樣獲取用戶當(dāng)前位置”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!