uniapp小程序获取位置权限(不允许拒绝)
需求
小程序上如果需要一些定位功能,那么我们需要提前获取定位权限。我们页面的所有功能后续都需要在用户同意的前提下进行,所以一旦用户点了拒绝,我们应该给予提示,并让用于修改为允许。
实现
1.打开手机GPS
经过测试发现即使手机GPS没有打开,小程序依旧可以获取定位信息。
const { locationEnabled } = uni.getSystemInfoSync()
if (!locationEnabled) {
uni.showToast({
title: '该功能需要手机定位,请打开手机定位后重新进入!',
})
return
}
2.获取小程序定位权限
- 首先我们检查用户是否开启了该权限
//传一个权限key,则返回true,false判断是否有该权限 //传一个权限key的数组,返回没有打开的权限列表 export async function authIsPass (authValue: string | string[]) { try { const res = await new Promise((resolve, reject) => { uni.getSetting({ success: (res) => { resolve(res) }, fail: (err) => { reject(err) }, }) }) const { authSetting }: any = res if (typeof authValue === 'string') { if (authSetting[authValue]) { return true } else { return false } } if (Array.isArray(authValue)) { let noPassList: string[] = authValue.filter((key: string) => !authSetting[key]) if (noPassList.length > 0) { return noPassList } else { return [] } } } catch (err) { return false } }因为抽离成了公共方法,所以会复杂一些,主要就是调用uni.getSetting获取到所有的设置权限,然后判断自己所需要的权限是否开启。
3.进行权限获取
uni.authorize({
scope: 'scope.userLocation',
fail: (res) => {
uni.showModal({
title: '使用该功能必须允许位置服务,是否重新授权?',
showCancel: false,
success: ({ confirm }) => {
if (confirm) {
uni.openSetting({
success() {
//重新获取权限并判断
console.log('开启权限成功')
},
fail() {
console.log('开启权限失败')
},
})
}
},
})
},
success: () => {
//重新获取权限并判断
},
})
上面代码主要依靠uni.showModal方法进行权限获取,如果你之前拒绝过该权限,则直接走fail回调,如果同意则走success回调。拒绝之前使用uni.showModal进行权限提示,并且在确定按钮绑定uni.openSetting方法重新进行权限设置。
完整逻辑
const setLocationAuth = async () => {
const { locationEnabled } = uni.getSystemInfoSync()
if (!locationEnabled) {
uni.showToast({
title: '该功能需要手机定位,请打开手机定位后重新进入!',
})
return
}
// 判断用户是否获取定位权限
//authIsPass方法就是上面步骤2的方法
const flag = await authIsPass('scope.userLocation')
if (!flag) {
uni.authorize({
scope: 'scope.userLocation',
fail: (res) => {
uni.showModal({
title: '使用该功能必须允许位置服务,是否重新授权?',
showCancel: false,
success: ({ confirm }) => {
if (confirm) {
uni.openSetting({
success() {
setLocationAuth()
console.log('开启权限成功')
},
fail() {
console.log('开启权限失败')
},
})
}
},
})
},
success: () => {
setLocationAuth()
},
})
return
}
//获取到定位权限后的操作
}
setLocationAuth()
上面方法,是在vue3 + ts的环境执行的。进入页面就会立即执行setLocationAuth方法,然后走获取权限的逻辑。如果用户点击拒绝则会弹出提醒,用户点击确定按钮后会跳到权限设置页面进行重新设置。无论他选择了允许还是不允许,重新回到页面都会重新执行setLocationAuth方法,再次进行判断。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

