React Native 权限适配之PermissionsAndroid
搞过原生Android开发的同学都清楚,Android 在6.0版本对权限管理做了很大的升级,其类似于IOS的管理管理方式需要用手动授权是否允许使用当前权限,也即是:在6.0以下环境,在AndroidManifest.xml就可以在安装时自动获得,而在6.0以上环境,一些“危险”的权限则需要弹出提示框供用户选择。为了解决6.0以上动态权限申请的问题,React Native提供了PermissionsAndroid。 处理思路 PermissionsAndroid常用函数
6.0以下权限在低于Android 6.0的设备上,权限只要写在AndroidManifest.xml里就会自动获得,此情形下check和request 方法将始终返回true。例如,申请相机的权限: async function requestCameraPermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,{
'title': 'Cool Photo App Camera Permission','message': 'Cool Photo App needs access to your camera ' +
'so you can take awesome pictures.'
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("You can use the camera")
} else {
console.log("Camera permission denied")
}
} catch (err) {
console.warn(err)
}
}
6.0以上权限对于Android 6.0以上的版本,申请权限需要以下的几个步骤。 <!--获取读写外置存储权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--获取相机权限-->
<uses-permission android:name="android.permission.CAMERA"/>
<!--获取地址相关权限-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2,在使用PermissionsAndroid之前,导入PermissionsAndroid。 import { PermissionsAndroid } from 'react-native'
3,主要调用的就是前面说的几个函数。 1. PermissionsAndroid.check(permission)
//permission是String类型,返回String类型
'granted': 同意
'denied' : 拒绝
'never_ask_again' : 永久性拒绝
2. PermissionsAndroid.request(permission,rationale?) //permission是String型,rationale对象
3. PermissionsAndroid.requestMultiple(permissions) //permissions为String型数组
实例下面是一个简单的权限获取实验,其效果如下图所示。 //获取读写权限
async requestReadPermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,{
'title': '获取读写权限','message': '没权限我不能工作,请授权读写权限'
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
this.show("你已获取了读写权限")
} else {
this.show("获取读写权限失败")
}
} catch (err) {
this.show(err.toString())
}
}
当然更详细的资料可以访问:React-Native之Android6.0以上权限申请 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |