React Native 权限适配之PermissionsAndroid

搞过原生Android开发的同学都清楚,Android 在6.0版本对权限管理做了很大的升级,其类似于IOS的管理管理方式需要用手动授权是否允许使用当前权限,也即是:在6.0以下环境,在AndroidManifest.xml就可以在安装时自动获得,而在6.0以上环境,一些“危险”的权限则需要弹出提示框供用户选择。为了解决6.0以上动态权限申请的问题,React Native提供了PermissionsAndroid。

处理思路 
对于Android手机环境,在低于Android 6.0的设备上,权限只要写在AndroidManifest.xml里就会自动获得。而对于于Android 6.0及以上环境,则需要使用PermissionsAndroid。

PermissionsAndroid

常用函数

  • check(permission) 
    返回一个promise,返回值为用户是否授权过的布尔值。
  • request(permission, rationale?) 
    弹出提示框向用户请求某项权限。返回一个promise,最终值为用户是否同意了权限申请的布尔值。
  • requestMultiple(permissions) 
    弹出一个权限申请框,框中向用户请求多个权限。返回值为一个object,key为各权限名称,对应值为用户授权与否。

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)
 }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

6.0以上权限

对于Android 6.0以上的版本,申请权限需要以下的几个步骤。 
1,在 AndroidMainfest.xml配置文件中添加需要申请的权限。

<!--获取读写外置存储权限-->
<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"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2,在使用PermissionsAndroid之前,导入PermissionsAndroid。

import { PermissionsAndroid } from 'react-native'
  • 1

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型数组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

实例

下面是一个简单的权限获取实验,其效果如下图所示。 
这里写图片描述 
当我们点击按钮后就去获取相关的权限,请求权限的核心代码如下:

 //获取读写权限
    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())
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

当然更详细的资料可以访问:React-Native之Android6.0以上权限申请

https://blog.csdn.net/xiangzhihong8/article/details/80726706

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/81030618