React Native Savetocameraroll在Android上拒绝了“权限拒绝”错误



描述

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");
}

相关内容

  • 没有找到相关文章

最新更新