【原创】解决React Native报错:(Android)/storage/emulated/0/Pictures (Permission denied)
问题背景:
使用 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:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.baiduproject"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="false" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> </application> </manifest>
问题原因:
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版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。
本文链接:【原创】解决React Native报错:(Android)/storage/emulated/0/Pictures (Permission denied)
发表评论: