【问题标题】:Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Snapchat/Snapchat-441126967.jpg: open failed: EACCES (Permission denied)无法解码流:java.io.FileNotFoundException:/storage/emulated/0/Snapchat/Snapchat-441126967.jpg:打开失败:EACCES(权限被拒绝)
【发布时间】:2021-07-11 14:22:16
【问题描述】:

请我每次尝试在我的颤振应用程序上选择图像时都会收到此错误。虽然在应用程序上从我的相机拍摄实时照片效果很好,但是当我尝试访问我的存储空间时,错误不断出现。

注意: 我使用 image_picker 包来选择两个图像并访问相机。

Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Snapchat/Snapchat-441126967.jpg: open failed: EACCES (Permission denied)

一切都运行良好,突然我开始遇到这个问题。我做了以下事情。

在我的 android/app/src/main/AndroidManifest.xml 中

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

我也将 requestLegacyExternalStorage 设置为 true。

在 Pubsec.yaml 中

permission_handler: ^8.1.2
image_picker:

颤振版本

Flutter 2.0.5 • channel stable

选择图片的代码块

 Future<void> _pickImage(ImageSource source) async {
    print(":: Pick Image executed :::");
    try {
      await Permission.storage.request();
      var status = await Permission.storage.status;
      print(":::: The Status of the permission is ::::");
      print(status);
      if (status.isGranted) {
        File selected =
        await ImagePicker.pickImage(source: source, imageQuality: 30);
        final bytes = selected.readAsBytesSync();
        String _img64 = base64Encode(bytes);

        setState(() {
          _imageFile = selected;
          base64 = _img64;
        });
        uploadFile();
      }
    } catch (error) {
      print(error);
    }

  }

权限已授予,如权限包所示,但是当我从设备库中选择图像时,我仍然在一天结束时收到错误消息。

【问题讨论】:

  • Android 11 设备?
  • 没有 Android 10 设备

标签: android image flutter storage


【解决方案1】:

所以最终我发现这个问题只存在于 android 10 设备上。前进的方法是将我的 image_picker 包更新到最新版本,目前是 0.8.1+3。

一切都很顺利。

【讨论】:

    【解决方案2】:

    这是由于 android 存储权限而发生的。他们在最新版本中解决了这个问题。请查看那里的自述文件。

    从 0.8.1 版开始,Android 实现支持在 Android 4.3 或更高版本上选择(多个)图像。

    无需配置 - 插件应该开箱即用。

    不再需要将 android:requestLegacyExternalStorage="true" 作为属性添加到 AndroidManifest.xml 中的标签,因为 image_picker 已更新为使用范围存储。

    【讨论】:

    • 完全正确,正如我在上面的回答中所述。感谢您的回复。
    猜你喜欢
    • 2015-06-27
    • 2016-10-15
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2020-05-17
    • 2023-03-03
    相关资源
    最近更新 更多