/**
* 授权&定位
*/
export default {
data() {
return {
isLocated: false // 是否定位成功
}
},
methods: {
/**
* 获取经纬度并触发回调函数
* @param {Function} successCb 获取成功回调
* @param {Function} authDenyCb 获取失败回调
*/
getLocation(successCb, authDenyCb) {
const self = this
uni.getLocation({
type: 'wgs84', // 默认gps 坐标
altitude: false, // 是否返回高度
accuracy: 'best', // 精度值为20m
success(res) {
successCb && successCb(res)
self.isLocated = true
},
fail(err) {
if (
err.errMsg ===
'getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化'
) {
uni.showToast({
title: '请勿频繁定位',
icon: 'none'
})
}
if (err.errMsg === 'getLocation:fail auth deny') {
// 未授权
uni.showToast({ title: '无法定位,请重新获取位置信息', icon: 'none' })
authDenyCb && authDenyCb()
self.isLocated = false
}
if (err.errMsg === 'getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF') {
uni.showModal({
content: '请开启手机定位服务',
showCancel: false
})
}
}
})
},
/**
* 重新授权并调用定位方法
* @param {Function} successCb 授权成功回调
* @param {Function} authDenyCb 授权失败回调
*/
getAuthorize(successCb, authDenyCb) {
uni.authorize({
scope: 'scope.userLocation',
success: () => {
this.getLocation(successCb, authDenyCb)
},
fail: (err) => {
err = err['errMsg']
uni
.showModal({
content: '需要授权位置信息',
confirmText: '确认授权'
})
.then((res) => {
if (res[1]['confirm']) {
uni.openSetting({
success: (res) => {
if (res.authSetting['scope.userLocation']) {
// 授权成功
uni.showToast({
title: '授权成功',
icon: 'none'
})
} else {
// 未授权
uni.showToast({
title: '授权失败',
icon: 'none'
})
}
this.getLocation(successCb, authDenyCb)
}
})
}
if (res[1]['cancel']) {
// 取消授权
console.log('取消')
this.getLocation(successCb, authDenyCb)
}
})
}
})
},
}
}
uniapp-微信小程序定位(授权定位)
最新推荐文章于 2025-04-18 07:15:00 发布