【问题标题】:Accessing Images in Android External Storage after reinstall application重新安装应用程序后访问 Android 外部存储中的图像
【发布时间】:2021-02-20 05:17:00
【问题描述】:

我们正在为该应用实施备份/恢复系统。我们使用了 Android 指南中记录的 Google Drive API

我们还将图像 URI 存储在数据库中。在恢复过程中,我们获得了 URI,但在重新安装应用程序时失去了访问图像的权限。我们有以下例外。

查询失败:java.lang.SecurityException: Permission Denial: opening provider ... 要求您使用 ACTION_OPEN_DOCUMENT 或相关 API

我们通过“ACTION_OPEN_DOCUMENT”获取图像 URI,但在删除/安装应用程序后无法保留它。相关的 API 是什么?我们是否需要移动应用特定文件夹中的图像并备份图像本身?

感谢您阅读本文,感谢您的帮助

【问题讨论】:

    标签: android local-storage storage storage-access-framework


    【解决方案1】:

    相关的 API 有哪些?

    ACTION_OPEN_DOCUMENT_TREEACTION_CREATE_DOCUMENT 可能是他们所指的。

    我们是否需要移动应用特定文件夹中的图像并备份图像本身?

    我们无法真正回答这个问题——这既是一项业务决策,也是一项技术决策。但是,如果您的应用被卸载并重新安装:

    • 您无法访问由您从存储访问框架获得的 Uri 值标识的内容
    • 在 Android 10+ 上,您将无法访问旧应用安装创建的在卸载过程中幸存的所有文件(例如,它们位于共享集合中)

    如何解决这个问题取决于您。除了您的提案,您还可以:

    • 将所有图像存储在单个目录树中(通过 ACTION_OPEN_DOCUMENT_TREE 获得),将相对路径存储在数据库中,并在应用恢复后再次请求访问该树
    • 在备份数据库之前从数据库中删除所有 Uri 值,如果数据库恢复,则无法访问这些图像
    • 将图像数据存储在数据库本身中(通常不推荐,但技术上可行)

    【讨论】:

    • 非常清楚,谢谢。多亏了你,我完全理解了限制。另一方面,我正在检查一个可以访问保存在自定义编辑文本中的图像的应用程序。据我了解,为了使其成为可能,他们需要将这些图像上传到他们的服务器,以便每次都独立使用这些图像到 Android 框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多