图库选择器在Android 10上使用文件方案返回Uri,如何读取?

问题描述

我的应用程序具有targetSdkVersion = 29(新的作用域存储策略),并且未在清单中启用requestlegacyexternalstorage标志(我不想启用它)。

我试图撰写意图的方式:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"),PICK_IMAGE);

也尝试过

val galleryIntent = Intent(Intent.ACTION_PICK).apply {
    type = PICK_INTENT_TYPE
}
flowInterruptBlocker?.blockFlowInterruption()
startActivityForResult(galleryIntent,GALLERY_INTENT_REQUEST_CODE)

还尝试向意图添加CATEGORY_OPENABLE。这些都不起作用。

因此,当我发送意图从画廊中选择图像时,一些来自游戏市场的应用程序会向我返回一个带有文件方案的Uri,例如:file:///storage/emulated/0/Download/sample.jpg >

当我尝试将其转换为位图(用于设置为imageView)时,出现EACCES(权限被拒绝)异常。

我试图用以下内容阅读它:

java.File Api

contentResolver.openInpuStream()

contentResolver.openFileDescriptor()

ImageDecoder

没有任何帮助。如我所见,在清单中未启用requestlegacyexternalstorage标志的情况下,无法在android 10(目标为29 sdk)上使用文件方案读取Uri。

如果我错了,请帮助我弄清楚如何阅读。

关于它的神秘事情,具有针对29 sdk的应用的android 11模拟器可以在没有requestlegacyexternalstorage标志的情况下读取这些类型的Uri。

是的,我已授予READ / WRITE_EXTERNAL_STORAGE权限。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)