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用法,将在下篇中详解。
以上是 react-native系列(19)API篇:请求系统权限(相册等) 的全部内容, 来源链接: utcz.com/z/382676.html