将 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的代码有效,因为它确实使我能够打开它,但它似乎并不持久,最终会导致再次错误。

我对安卓开发和一般开发非常陌生,所以我可能走错了......所以我的问题是...有没有办法将 URI 存储在数据库中,然后使用该存储的 URI 打开 PDF?有没有办法解决我打开pdf的方法的权限问题?

谢谢。

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

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

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

如果myFileIntent用于ACTION_OPEN_DOCUMENT,则在获得结果Uri时,在ContentResolver上调用takePersistableUriPermission()。这将完成您试图对这些标志执行的操作:获得对Uri标识的内容的长期权利。

最新更新