我正在制作一个非常简单的应用程序来显示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
标识的内容的长期权利。