美文网首页
uniapp 安卓和ios权限获取

uniapp 安卓和ios权限获取

作者: 南土酱 | 来源:发表于2023-07-04 10:04 被阅读0次

    项目用uniapp 的时候,有个功能是 拍照和相册。本来没啥问题,客户非要在提示使用权限的时候点击禁止,然后在点拍照就没提示了👍🙄
    思路: 其实就是每次拍照和相册判断是否开启对应的权限
    搜索到一位老哥的文章。ios 确实有这个权限列表的问题。
    (68条消息) uniapp 安卓和ios权限获取uniapp ios 网络权限前端菜鸟丶Ndie的博客-CSDN博客
    用它的方法解决完美了。不过本人自己优化了一下

    使用该功能前一定要下载 官方的权限js文件permission.js
    我是放到 utils 两个文件同级,放到哪个文件夹不是固定的
    另外要注意自己用 vuex 或者 uni storage 存储一个 变量 用来判断 ios 是否第一次打开拍照或者相册

    工具包

    import permission from "./permission";
    
    //手机权限,摄像头和图册
    export function permissionCheck(){
        return new Promise(async (resolve,reject)=>{
            if(uni.getSystemInfoSync().platform === 'ios'){
                const camera = permission.judgeIosPermission("camera");//判断ios是否给予摄像头权限
                //ios相册没权限,系统会自动弹出授权框
                //let photoLibrary = permission.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
                if(camera){
                    resolve();
                }else{
                    reject('需要开启相机使用权限');
                }
            }else{
                let camera = await permission.requestAndroidPermission("android.permission.CAMERA");//判断安卓是否给予摄像头权限
                let photoLibrary = await permission.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");//判断安卓是否给予相册权限
                if(camera == -1 || photoLibrary == -1){
                    reject('请同时开启相机和相册的使用权限');
                }else{
                    resolve();
                }
            }
        })
    }
    //跳转到手机开启权限的界面
    export function phonePermissionSetting(){
        permission.gotoAppPermissionSetting();
    }
    
    

    具体应用场景

    import {permissionCheck,phonePermissionSetting} from '@/utils/phonePermissionCheck'
    
    //选择照片
        chooseImage(){
          const callback = ()=>{
            uni.chooseImage({
              count: 1,
              sourceType: ["camera"],
              success: (res) => {
               //选择成功
              },
            });
          }
          // #ifdef H5
          callback()
          // #endif
    
          //由于ios的机制问题,只有用过该功能它的权限列表才会出现该权限的设置,ios调用第一次就可直接打开相机
          // #ifndef H5
          const iosFirstOpenCamera = //这里是获取vuex 或者 storage 存储的变量
          if(uni.getSystemInfoSync().platform === 'ios' && iosFirstOpenCamera){
      //把判断ios这个变量置为false        
    this.$vuex.commit('SET_IOS_FIRST_OPEN_CAMERA', false)
      or  uni.getStorage('xxx')
    
            callback()
          }else{
            permissionCheck().then(res=>{
              callback()
            }).catch(err =>{
              uni.showModal({
                title: '手机权限',
                content: err,
                success: function (res) {
                  if (res.confirm) {
                    phonePermissionSetting()
                  } else if (res.cancel) {
                  }
                }
              });
            })
          }
          // #endif
        },
    

    \color{#228B22}{前端学习小总结,不对之处,欢迎大神们喷我。可以的话顺手点个赞吧~~!}
    \color{red}{警: 禁止抄袭,转载说明出处 }

    相关文章

      网友评论

          本文标题:uniapp 安卓和ios权限获取

          本文链接:https://www.haomeiwen.com/subject/ggncudtx.html