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

Posted

技术标签:

【中文标题】可能的未处理承诺拒绝(id:0):错误:权限被拒绝(通过“CameraRoll.saveToCameraRoll()”保存图像时)【英文标题】:Possible Unhandled Promise Rejection (id: 0): Error: Permission denied (while saving the image via "CameraRoll.saveToCameraRoll()") 【发布时间】:2019-03-04 07:27:52 【问题描述】:

ss from my debugger

我在尝试通过 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 manifest 和 ios 获取权限。 (在安卓上) android manifest permissions

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

【问题讨论】:

您是否尝试过使用let saveResult = await CameraRoll.saveToCameraRoll(data.uri); @MarvinKlar 我都试过了。甚至在现在之前给我同样的错误。 YellowBox.js:67 Possible Unhandled Promise Rejection (id: 0): Error: Permission denied Error: Permission denied 【参考方案1】:

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

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

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

代码如下=>

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

【讨论】:

【参考方案2】:

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

将下面的代码添加到application in android/app/src/main/AndroidManifesst.xml:

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

【讨论】:

以上是关于可能的未处理承诺拒绝(id:0):错误:权限被拒绝(通过“CameraRoll.saveToCameraRoll()”保存图像时)的主要内容,如果未能解决你的问题,请参考以下文章

如何解决该错误>> WARN可能的未处理承诺拒绝(id:0):

可能的未处理承诺拒绝(id:0):TypeError:适配器不是函数。 (在“适配器(配置)”中,“适配器”未定义)?

如何修复可能的未处理承诺拒绝(id:0)?以及如何修复无法读取未定义的属性“导航”?

可能的未处理承诺拒绝(id:1):TypeError:网络请求失败

Axios 承诺处理 - 在 react-native 中获取“可能的未处理承诺拒绝 - 类型错误:网络请求失败”

可能未处理的承诺拒绝(id 0)反应原生