0


uniapp小程序获取位置权限(不允许拒绝)

需求

小程序上如果需要一些定位功能,那么我们需要提前获取定位权限。我们页面的所有功能后续都需要在用户同意的前提下进行,所以一旦用户点了拒绝,我们应该给予提示,并让用于修改为允许。

实现

1.打开手机GPS

经过测试发现即使手机GPS没有打开,小程序依旧可以获取定位信息。

const{ locationEnabled }= uni.getSystemInfoSync()if(!locationEnabled){
  uni.showToast({title:'该功能需要手机定位,请打开手机定位后重新进入!',})return}

2.获取小程序定位权限

在这里插入图片描述

  1. 首先我们检查用户是否开启了该权限//传一个权限key,则返回true,false判断是否有该权限//传一个权限key的数组,返回没有打开的权限列表exportasyncfunctionauthIsPass(authValue: string | string[]){try{const res =awaitnewPromise((resolve, reject)=>{ uni.getSetting({success:(res)=>{resolve(res)},fail:(err)=>{reject(err)},})})const{ authSetting }: any = res if(typeof authValue ==='string'){if(authSetting[authValue]){returntrue}else{returnfalse}}if(Array.isArray(authValue)){letnoPassList: string[]= authValue.filter((key: string)=>!authSetting[key])if(noPassList.length >0){return noPassList }else{return[]}}}catch(err){returnfalse}} 因为抽离成了公共方法,所以会复杂一些,主要就是调用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

方法重新进行权限设置。

完整逻辑

constsetLocationAuth=async()=>{const{ locationEnabled }= uni.getSystemInfoSync()if(!locationEnabled){
      uni.showToast({title:'该功能需要手机定位,请打开手机定位后重新进入!',})return}// 判断用户是否获取定位权限//authIsPass方法就是上面步骤2的方法const flag =awaitauthIsPass('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

方法,再次进行判断。

标签: uni-app 小程序

本文转载自: https://blog.csdn.net/qq_44473483/article/details/136505709
版权归原作者 丹丹的小跟班 所有, 如有侵权,请联系我们删除。

“uniapp小程序获取位置权限(不允许拒绝)”的评论:

还没有评论