首页 > 解决方案 > Android从相对uri打开InputStream到ACTION_OPEN_DOCUMENT?

问题描述

我正在尝试在 android 4.4(api 级别 19)中打开与 json 配置文件相关的多个文件,我使用了

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType({mime});
this.startActivityForResult(intent, {code});

让用户找到配置文件,并从那里打开多个我知道配置文件路径的文件。

但我明白了

Caused by: java.lang.SecurityException: 
Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider
uri content://com.android.providers.downloads.documents/document/raw:/storage/emulated/0/Download/{relative file}
requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

我不想使用用户界面打开其他文件,所以我尝试添加以下权限而没有得到任何结果

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

我宁愿将文件分开,而不是放在 blob 或 zip 文件中

标签: androidrelative-pathpermission-deniedandroid-contentresolverstorage-access-framework

解决方案


ACTION_OPEN_DOCUMENT仅允许您访问EXTRA_ALLOW_MULTIPLE用户选择的确切文件(或文件,如果您使用 )。

您可以使用ACTION_OPEN_DOCUMENT_TREE允许用户选择一个文件夹 - 然后您将可以访问该文件夹(及其子文件夹)中的所有文件。


推荐阅读