Unable to decode stream: java.io.FileNotFoundException:
/storage/emulated/0/DCIM/xxx/xxxx.png:
open failed: EACCES (Permission denied)
应用AndroidSDK更新到29之后,以前图片处理报错。
原因:Android10+之后,引入了分区存储的概念,以前可以直接对外部SDK地址处理的方式在Android10+之后被禁用,需要特定的API才能操作。
解决方式有两种:
解决方式一:.
直接禁用分区存储,在application标签下直接添加android:requestLegacyExternalStorage="true"
但是需要注意一点,在Android11+之后会忽略这个属性,最终还是需要使用第二种方式。
<application
...
android:requestLegacyExternalStorage="true"
>
解决方式二:
通过指定的API操作多媒体文件,以图片为例:
@RequiresApi(api = Build.VERSION_CODES.P)
private Bitmap getBitmapP(Intent data) {
try {
ImageDecoder.Source sourceMap = ImageDecoder.createSource(getContentResolver(), data.getData());
return ImageDecoder.decodeBitmap(sourceMap).copy(Bitmap.Config.ARGB_8888, true);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}