问题背景:
使用 React-Native-Camera 组件拍照,结果权限报错:
Code Snippets:
//拍摄照片
takePicture() {
let target = this.props.toMemory ? {
target: Camera.constants.CaptureTarget.temp,
captureQuality: Camera.constants.CaptureQuality["low"],
} : {
target: Camera.constants.CaptureTarget.disk,
captureQuality: Camera.constants.CaptureQuality["low"]
};
this.camera.capture(target).then(function(data){
alert("拍照成功!图片保存地址:\n" + data.path)
}).catch(
err => console.error(err)
);
}
AndroidManifest.xml:
package="com.baiduproject">
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
问题原因:
1. 用户拒绝对 APP 授予 storage 存储权限。
2. 在 < Android 6.0的设备上,权限只要写在AndroidManifest.xml里APP就会自动获得,此情形下check和request方法将始终返回true;但是在 >= Android 6.0的设备上,权限管理机制发生了较大的变化,除了要显示的在AndroidManifest.xml中声明必需权限以外,系统认为一些 "危险" 的权限还需要弹框供用户再次选择是否授权。
临时解决方案:
把 capture target 属性 由 disk 改为 temp即可 【target: Camera.constants.CaptureTarget.temp】
终极解决方案:
请移步这里有你想要的答案:https://github.com/yonahforst/react-native-permissions