首页 > 解决方案 > 将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 的方法来解决权限问题?

谢谢你。

标签: androidsqlitepdfpermissions

解决方案


我尝试将以下内容添加到我将pdf添加到数据库的代码中...

这些标志在这里都不合适。这些是供内容提供者说明您可以获得哪些访问权限。

有没有办法将 URI 存储在数据库中,然后使用存储的 URI 打开 PDF?

如果myFileIntent是 for ,则在获得结果时ACTION_OPEN_DOCUMENT调用takePersistableUriPermission()a 。这将完成您试图对这些标志执行的操作:获得对.ContentResolverUriUri


推荐阅读