React Native申请Android权限,PermissionsAndroid,权限申请多权限申请,这篇就够了

RN权限申请

最基础的一步,先在android的AndroidManifest.xml文件中添加权限声明
就像这样。
在这里插入图片描述
然后使用reactNative自带的权限管理API,使用比较简单。

PermissionsAndroid和它的三个方法

这个API主要使用的就是三个方法,用于检查是否拥有权限的check方法,请求权限的request方法,请求多个权限的requestMultiple方法,

  • check(permission):检查传入的权限是否经过授权,返回的是一个promise,解析为布尔值。

  • request(permission,[rationale]):传入需要请求的权限,第二个参数rationale对象可以看官方文档,尾部链接,这是个可选项,

  • requestMultiple(permission): 传入一个包含多个权限的数组。

请求权限返回的结果如下:

  • GRANTED: ‘granted’, 表示用户已授权
  • DENIED: ‘denied’, 表示用户已拒绝
  • NEVER_ASK_AGAIN: ‘never_ask_again’,表示用户已拒绝,且不愿被再次询问。

先从android 6.0以下的版本说起,

据说六点零以下版本,权限写在AndroidManifest.xml文件里就好,这个时候权限都可以直接请求到,这个时候的check始终返回true,并且request请求始终返回PermissionsAndroid.RESULTS.GRANTED
写法和下面六点零以上版本一样

android6.0以上版本

首先是请求单个相机权限的标准案例:

async requestCameraPermissions() {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.CAMERA,
        {
          title: '申请相机权限',
          message: '不给权限不干活',
          buttonPositive: 'OK',
        },
      );
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        infoToast('已获取相机权限');
      } else {
        errorToast('获取权限失败');
      }
    } catch (err) {
      console.log(err);
    }
  }

因为是请求权限是个异步过程,所以需要async和await关键字,然后判断granted是否等于PermissionsAndroid.RESULTS.GRANTED来判断是否请求成功,
然后再我的小米上运行:
在这里插入图片描述
然后就获取成功了

获取多个权限

和上文差不多,见下文:

async requestAllPermissions() {
    try {
      //申请多个权限,传入一个权限对象数组
      const granted = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.PROCESS_OUTGOING_CALLS,
        PermissionsAndroid.PERMISSIONS.CALL_PHONE,
        PermissionsAndroid.PERMISSIONS.USE_SIP,
      ]);
      if (
        granted['android.permission.CALL_PHONE'] ===
        PermissionsAndroid.RESULTS.GRANTED
      ) {
        console.log('CALL_PHONE 权限已获取');
      } 
      if (
        granted['android.permission.PROCESS_OUTGOING_CALLS'] ===
        PermissionsAndroid.RESULTS.GRANTED
      ) {
        console.log('PROCESS_OUTGOING_CALLS 权限已获取');
      } 
      if (
        granted['android.permission.USE_SIP'] ===
        PermissionsAndroid.RESULTS.GRANTED
      ) {
        console.log('USE_SIP 权限已获取');
      }
    } catch (err) {
      console.log(err);
    }
  }

简单写了一下,是不是简单的一批,
在这里插入图片描述
可以看到,确实获取了多个权限。
可以把请求权限的方法放在项目初次进入或者放在需要使用权限的地方
PermissionsAndroid的中文的官方文档 :https://reactnative.cn/docs/next/permissionsandroid#%E7%A4%BA%E4%BE%8B

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值