重新安装应用程序后访问 Android 外部存储中的图像

Accessing Images in Android External Storage after reinstall application

我们正在为该应用实施 backup/restore 系统。我们使用 Google 驱动器 API,如 Android 指南

中所述

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

Failed query: java.lang.SecurityException: Permission Denial: opening provider ... requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

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

感谢您阅读本文,如有任何帮助我们将不胜感激

What are the related APIs?

ACTION_OPEN_DOCUMENT_TREEACTION_CREATE_DOCUMENT 可能是他们所指的。

Do we need to move images in an app-specific folder and backup images itself also?

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

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

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

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