首页 > 解决方案 > Android Q - 用户在应用设置中删除 uri 的持久权限。如何再次请求许可?

问题描述

Android Q. 我使用存储访问框架(https://developer.android.com/guide/topics/providers/document-provider)在 android 中创建文件,例如下载目录中的一些图像或视频。我为此使用 ACTION_CREATE_DOCUMENT,之后我获得了此 uri 的持久许可。因此,在更新我的应用程序、重新启动设备后,我可以从我的应用程序访问此文件。但用户可以转到系统应用设置并删除此权限。之后,我无法通过此 Uri 访问此文件(例如,我将此 Uri 存储在数据库中)。但我需要向用户显示此图像/视频。我该怎么做?如何再次请求此 Uri 的权限?ACTION_OPEN_DOCUMENT 不支持只打开一个特定的 Uri?

标签: androidstorage-access-frameworkandroid-10.0

解决方案


根据范围存储文档:

具有过滤视图的应用程序始终对其创建的文件具有读/写访问权限,无论是在其应用程序特定目录内部还是外部。您的应用无需声明任何存储权限即可访问这些文件。

但是我们在 Android Q 中有一个问题,我们无法使用原始路径访问文件(使用原始路径或原始 Uri 创建一个 File() 实例),因此我们必须通过contentResolver.

对于您的情况,如果您已经创建文件 Uri 并将其保存到数据库中,则只需使用context.contentResolver.openOutputStream(your-uri)context.contentResolver.openInputStream(your-uri)访问您的文件。


推荐阅读