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

react

在旧版本,要获取设备权限(如读写权限等)直接在项目中配置即可,无需过问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

回到顶部