react-native系列(19)API篇:请求系统权限(相册等)

在旧版本,要获取设备权限(如读写权限等)直接在项目中配置即可,无需过问app用户。在新版本的API中,出于安全考虑,要获取设备的相应权限需要通过权限请求,用户通过之后才可以获取权限,android和ios的获取权限方式不同。

android权限

官方提供了PermissionsAndroid来获取权限,以获取WRITE权限为例,看如下代码:

UNSAFE_componentWillMount() {
    this.requestReadPermission();
}

async requestReadPermission() {
    try {
        const os = Platform.OS; // android or ios
        if(os === 'android'){
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
                {
                    //第一次请求【拒绝】后提示用户你为什么要这个权限
                    'title': '我要读写权限',
                    'message': '没权限我不能工作,同意就好了'
                }
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                console.log('你已获取了读写权限');
                // 继续运行其它代码
            } else {
                console.log('获取读写权限失败');
            }
        }else{
            console.log('你已获取了读写权限');
            // 继续运行其它代码
        }
    } catch (err) {
        console.log(err.toString());
    }
}

PermissionsAndroid支持的权限类别可以到官网查看,这样在用户首次启动app时将会收到读写权限的请求询问。除此之外,最好还要在android/app/src/main/AndroidManifest.xml配置上

// 这里你需要什么权限就配置什么权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

ios权限

ios配置权限较复杂,以常用的获取相册的读写权限为例,需要链接RCTCameraRoll库(也有部分权限只需配置Info.plist即可,视官方RN库支持程度而定)。

(1) 进入到工程项目中的 node_module/react-native/Libraries/CameraRoll

(2) 把 RCTCameraRoll.xcodeproj 添加到在项目工程的 Liberaries 文件夹下

(3) 在 Build Phases -> Link Binary With Libraries 里添加 libRCTCameraRoll.a

(4) 由于苹果安全策略更新,还需要在 Info.plist 配置请求照片相的关描述字段(Privacy - Photo Library Usage Description

这样,就可以在程序中使用读写权限了,以相册为例:

CameraRoll.getPhotos(...) // 获取相册照片或视频
CameraRoll.saveToCameraRoll(...) // 保存照片或视频

关于CameraRoll用法,将在下篇中详解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值