android - 将uri存储在SQLite数据库中,由于权限而无法从uri打开PDF
问题描述
我正在制作一个非常简单的应用程序来显示 PDF。我想在各种库中组织 pdf,因此我将详细信息(文档名称和 URI)存储在 SQLite 数据库中。我遇到的问题是,当尝试从 URI 打开 pdf 时,我收到此错误消息...
java.lang.SecurityException: Permission Denial: reading com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/document/primary%3APictures%2F2002.pdf from pid=29624, uid=10179 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
我尝试将以下内容添加到我将pdf添加到数据库的代码中...
myFileIntent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
myFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
这样做证明了我打开pdf的代码有效,因为它确实使我能够打开它,但它似乎并不持久,最终会再次导致错误。
我对 android dev 和 dev 非常陌生,所以我可能会完全错误地处理这一切......所以我的问题是......有没有办法将 URI 存储在数据库中,然后使用存储的 URI 打开 PDF ? 有没有办法通过我的打开 pdf 的方法来解决权限问题?
谢谢你。
解决方案
我尝试将以下内容添加到我将pdf添加到数据库的代码中...
这些标志在这里都不合适。这些是供内容提供者说明您可以获得哪些访问权限。
有没有办法将 URI 存储在数据库中,然后使用存储的 URI 打开 PDF?
如果myFileIntent
是 for ,则在获得结果时ACTION_OPEN_DOCUMENT
调用takePersistableUriPermission()
a 。这将完成您试图对这些标志执行的操作:获得对.ContentResolver
Uri
Uri
推荐阅读
- go - 我使用 pprof 进行的 golang 程序分析显示内存在 std/json 包中的 json (* decodeState) objectInterface 处增加
- javascript - 如何在 React 中使用由 Stenciljs 创建的嵌套 Web 组件
- xcode - 如何修复在本地构建良好的 Travis CI 错误
- r - 如何在r中分割一天中的不同时间
- angular - 如果给出 ng-content,如何排除绑定?
- python - 如何更改 YAML 文件中的一行?
- django-models - Django 模型将 2 个 Foreinkeys 保存到同一个模型
- node.js - 在同一文件中已存在的字符串之间写入文件中的字符串
- javascript - 如何使一个数字等于所有数字
- reactjs - 函数 App() vs 类 App 扩展 App.js 文件中的组件