首页 > 解决方案 > 可能的未处理承诺拒绝(id:0):错误:权限被拒绝(通过“CameraRoll.saveToCameraRoll()”保存图像时)

问题描述

来自我的调试器的 ss

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

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 manifest 和 ios 获得了权限。(在 Android 上) android 清单权限

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

标签: react-nativereact-native-camera

解决方案


我浏览了很多资源,终于找到了原因。不知何故,我的清单权限没有获得写入外部权限的权限,如下所示。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

所以我做了什么,我为外部写入添加了运行时权限,它工作正常。我使用来自react-native 的PermissionsAndroid

代码如下=>

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

推荐阅读