android - 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?
解决方案
根据范围存储文档:
具有过滤视图的应用程序始终对其创建的文件具有读/写访问权限,无论是在其应用程序特定目录内部还是外部。您的应用无需声明任何存储权限即可访问这些文件。
但是我们在 Android Q 中有一个问题,我们无法使用原始路径访问文件(使用原始路径或原始 Uri 创建一个 File() 实例),因此我们必须通过contentResolver
.
对于您的情况,如果您已经创建文件 Uri 并将其保存到数据库中,则只需使用context.contentResolver.openOutputStream(your-uri)
或context.contentResolver.openInputStream(your-uri)
访问您的文件。
推荐阅读
- aframe - 手机360°全景陀螺仪问题
- python - SQLAlchemy 重新映射类
- angular - 使用 JSON 中的值填充 Select
- ios - 是否可以在 Swift 运行时更改本地化语言?
- reactjs - 从 HTML 元素中获取值时的函数参数类型
- sql-server - 用变量替换标识列从数据库中编写对象以将对象复制到其他环境
- amazon-web-services - 无法将 Lambda 连接到 ElastiCache Redis 集群
- php - 我想加入数据并显示一个表中的所有记录和另一个表中的一条记录
- ios - YouTube iOS 应用如何呈现加载页面?
- string - 如何使用不安全从没有内存副本的字符串中获取字节切片