android - 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 文件中
解决方案
ACTION_OPEN_DOCUMENT
仅允许您访问EXTRA_ALLOW_MULTIPLE
用户选择的确切文件(或文件,如果您使用 )。
您可以使用ACTION_OPEN_DOCUMENT_TREE允许用户选择一个文件夹 - 然后您将可以访问该文件夹(及其子文件夹)中的所有文件。
推荐阅读
- rust - 为什么 Vec::iter_mut 没有出现在 std::vec::Vec 的文档索引中?
- java - mongodb java过滤器问题与numberlong
- sql - 在 SEDE(Stack Exchange 数据资源管理器)中获取所有带有自我接受答案的帖子
- javascript - 如何在Vue JS中通过v-model检查输入框是否为空?
- html - JavaScript React Redux:数据库中的字段未在网页中呈现并且无法在下拉菜单中选择值
- bash - 如何在启用 FIPS 的 RedHat6 服务器上禁用 OpenSSL md5 散列
- pytorch - 如何在pytorch中增加批量大小
- flutter - Flutter,获取数据库记录,然后是互联网 json
- leaflet - 如何在不破坏“流”显示的情况下将弹出窗口或绑定弹出窗口添加到 Leaflet FlowMap 中的点/标记?
- php - Laravel 删除数组中具有重复值的对象