React native 可能未处理的承诺拒绝(id:0):错误:权限被拒绝(通过“CameraRoll.saveToCameraRoll()”保存图像时)

React native 可能未处理的承诺拒绝(id:0):错误:权限被拒绝(通过“CameraRoll.saveToCameraRoll()”保存图像时),react-native,react-native-camera,React Native,React Native Camera,尝试通过react native的“CameraRoll.saveToCameraRoll()”将图像保存到库中时,我的权限被拒绝。我的代码如下==> takePicture = async function() { if (this.camera) { const data = await this.camera.takePictureAsync(); let saveResult = CameraRoll.saveToCameraRoll(data.uri); console.w

尝试通过react native的“CameraRoll.saveToCameraRoll()”将图像保存到库中时,我的权限被拒绝。我的代码如下==>

takePicture = async function() {
if (this.camera) {
  const data = await this.camera.takePictureAsync();
  let saveResult = CameraRoll.saveToCameraRoll(data.uri);
  console.warn('takePicture ', saveResult);
  console.warn('picture url ', data.uri);
}
})

我通过添加必需的代码从android清单和ios获得了权限。 (关于Android)


即使在ios中,我也会遇到同样的权限拒绝错误。我该怎么做才能工作呢。我不想尝试RN文件系统。

我查阅了大量资料,终于找到了原因。不知何故,我的清单权限没有获得写入外部权限的权限,如下所示


在运行时添加权限后,问题一直存在,直到我执行以下操作:

将以下代码添加到
android/app/src/main/androidmanifest.xml
中的
应用程序中:

<application
android:requestLegacyExternalStorage="true"
...

您是否尝试过使用
let saveResult=wait CameraRoll.saveToCameraRoll(data.uri)?@MarvinKlar我都试过了。给了我同样的错误,甚至在现在之前
YellowBox.js:67可能的未处理承诺拒绝(id:0):错误:权限拒绝错误:权限拒绝
try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
      {
        title: "Cool Photo App Camera Permission",
        message:
          "Cool Photo App needs access to your camera " +
          "so you can take awesome pictures.",
        buttonNeutral: "Ask Me Later",
        buttonNegative: "Cancel",
        buttonPositive: "OK"
      }
    );
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      console.log("You can use the camera");

      const data = await this.camera.takePictureAsync();
      let saveResult = CameraRoll.saveToCameraRoll(data.uri);
      console.warn("takePicture ", saveResult);
      console.warn("picture url ", data.uri);
    } else {
      console.log("Camera permission denied");
    }
  } catch (err) {
    console.warn(err);
  }
<application
android:requestLegacyExternalStorage="true"
...