来自sharedPreferences字符串的ImageView.setImageURI()由于权限错误而无法加载

时间:2018-04-16 20:22:15

标签: android imageview sharedpreferences

我有一个PreferenceFragment,它实现了我已扩展的自定义首选项。它启动一个intent,从文件系统返回一个选定的图像。 一切都很好,大多数。 “首选项”在首选项视图中设置图像缩略图,并抓取显示名称以设置为首选项摘要。 URI字符串保持不变。但是,当首选项屏幕初始化时,由于权限错误,它无法检索显示名称或图像资源。

Unable to open content: content://com.android.providers.downloads.documents/document/125
     java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{80311e3 16941:com.companyXXX.appnameXXX/u0a87} (pid=16941, uid=10087) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

如果有人想要,我可以发布代码。我确信我已经确定了问题所在,但我不确定如何为ImageView.setImageUri()资源访问添加权限。

这不是How to ask permission to access gallery on android M.?的副本,因为我对初始文件选择有权限。这个工作很精细。

希望有人熟悉这个问题并提供解决方案。

1 个答案:

答案 0 :(得分:0)

  

它启动一个intent,从文件系统返回一个选定的图像。

根据Uri,您使用的是ACTION_OPEN_DOCUMENT,或者ACTION_GET_CONTENT。两者都不限于文件系统上的文件。

  

URI字符串仍然存在

一般情况下,您不应假设Uri无限期有效。它们像URL一样工作,虽然有些URL可能一直在工作,但其他URL与有效的用户会话相关联,否则会在一段时间后中断。

  

我不知道如何添加资源访问权限

如果您使用ACTION_OPEN_DOCUMENT,则可以致电takePersistableUriPermissions()上的ContentResolver以请求对Uri标识的内容进行持久访问。 Uri可能仍会中断(例如,用户删除内容),但您可以像现在一样保留Uri

否则,除了制作内容的副本外,您无法获得对内容的持久访问权。