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