问题描述
我的应用程序具有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 (将#修改为@)