描述
savetocameraroll失败, Permission denied
Android上的错误
繁殖
将AWS S3照片保存到设备摄像头卷突然失败
RNFS.downloadFile(DownloadFileOptions)
.promise
.then(() => {
CameraRoll.saveToCameraRoll(path, this.state.type) // path = /data/user/0/com.XXX.app/filesimage-xyz.jpg"
.then((data) => {
RNFS.unlink(path)
.then(() => {
console.log('Download and file unlink succeeded');
})
.catch((err) => {
console.error("RNFS unlink error: ", err.message);
});
})
.catch((error) => {
console.error("Save to Cameral roll error: ",error.message);
//error = code:"EUNSPECIFIED"
// framesToPop:1
// message:"Permission denied"
// stack:"Error: Permission denied↵
});
})
.catch((error) => {
console.error("RNFS.downloadFile! error: ", error.message);
});
在android/app/src/main/androidmanifest.xml中 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在其他少数其他许可中。
什么可能导致拒绝错误的权限?在清单级别将如何保存到Cameraroll?
其他信息
- REACT本机版本:[填写:错误是否在最新的RN发行版中复制?]与V41 核对
- 平台:[填写:iOS,Android还是两者?]android inly
- 操作系统:[填写:MacOS,Linux还是Windows?]Dev Macos Sierra
- 开发工具:[填写:XCode或Android Studio版本,iOS或Android SDK版本(如果适用)]RN CLI Android SDK
从Android 6.0开始(API级别23),用户在应用程序正在运行时授予应用程序权限,而不是在安装应用程序时。您可以使用CormissionAndroid API允许用户授予外部存储访问权限。
示例:
requestExternalStoragePermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
{
title: 'My App Storage Permission',
message: 'My App needs access to your storage ' +
'so you can save your photos',
},
);
return granted;
} catch (err) {
console.error('Failed to request permission ', err);
return null;
}
};
您可以尝试:
...
let permission = await Expo.Permissions.askAsync(Expo.Permissions.CAMERA_ROLL);
if (permission.status === 'granted') {
await CameraRoll.saveToCameraRoll(fileUrl, "photo");
}