无法解码流:java.io.FileNotFoundException:/storage/emulated/0/Snapchat/Snapchat-441126967.jpg:打开失败:EACCES(权限被拒绝)
Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Snapchat/Snapchat-441126967.jpg: open failed: EACCES (Permission denied)
每次我尝试在我的 flutter 应用程序中选择图像时,我总是收到这个错误。虽然在应用程序上用我的相机拍摄实时照片效果很好,但是当我尝试访问我的存储时,错误不断出现。
注意:
我使用 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 版本
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);
}
}
权限已授予,如权限包所示,但当我 select 来自设备图库的图像时,我仍然在一天结束时收到错误消息。
所以最终我发现问题只出现在 android 10 台设备上。前进的方向是将我的 image_picker 包更新到最新版本,目前是 0.8.1+3.
一切都很好。
这是因为 android 存储权限。他们在最新版本中解决了这个问题。请查看阅读我的文件。
从版本 0.8.1 开始,Android 实施支持在 Android 4.3 或更高版本上选择(多个)图像。
无需配置 - 插件应该开箱即用。
不再需要将 android:requestLegacyExternalStorage="true" 作为属性添加到 AndroidManifest.xml 中的标签,因为 image_picker 已更新为使用分区存储。
每次我尝试在我的 flutter 应用程序中选择图像时,我总是收到这个错误。虽然在应用程序上用我的相机拍摄实时照片效果很好,但是当我尝试访问我的存储时,错误不断出现。
注意: 我使用 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 版本
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);
}
}
权限已授予,如权限包所示,但当我 select 来自设备图库的图像时,我仍然在一天结束时收到错误消息。
所以最终我发现问题只出现在 android 10 台设备上。前进的方向是将我的 image_picker 包更新到最新版本,目前是 0.8.1+3.
一切都很好。
这是因为 android 存储权限。他们在最新版本中解决了这个问题。请查看阅读我的文件。
从版本 0.8.1 开始,Android 实施支持在 Android 4.3 或更高版本上选择(多个)图像。
无需配置 - 插件应该开箱即用。
不再需要将 android:requestLegacyExternalStorage="true" 作为属性添加到 AndroidManifest.xml 中的标签,因为 image_picker 已更新为使用分区存储。