Android 11:How/where 写入应该在卸载后仍然存在的混合媒体文件
Android 11: How/where to write mixed media files that should survive uninstall
我正在编写一个针对 Android11 的特定用例相机应用程序。当我点击记录时,我想在某处创建一个新目录(名称基于时间戳等),其中包含结果视频以及在录制过程中也写入的一大堆其他自定义 YAML/JSON/CSV 文件(逻辑上属于录制的“输出”)。
我希望所有生成的文件都能在应用程序中存活下来 uninstall/reinstall 因为我不想让用户在卸载应用程序时丢失他们曾经记录的所有内容。如何使用 Android 11 中的新范围存储更改等执行此操作?
查看概述 here,我可以看到:
- App-specific files, App preferences and Database 显然不适合其他这些文件无法在卸载后继续存在
- 文档和其他文件使用存储访问框架,但这不合适,因为每次你想写东西时它都需要一个系统文件选择器。这会扰乱 recording/user 体验的流程,没有相机应用程序能像那样工作。
- Datasets/BlobStoreManager (here) 也不适合我的用例。
- MediaStore API 看起来应该是那个,但就生成整个输出目录而言,它似乎无法满足我的要求,包括自定义 YAML/JSON/CSV 文本文件,它们都属于同一文件。我的目标是用户在任何时候都可以简单地转到文件资源管理器,导航到适当的文件夹,然后将包含录音的文件夹复制到他们的计算机或其他任何地方,以 save/view 数据。即使 MediaStore.Files 似乎也不能保证如果您的应用程序使用分区存储,您实际上可以做到这一点。
似乎剩下的唯一选择是使用 MANAGE_EXTERNAL_STORAGE 并将数据放在主目录中我想要的任何位置,但这似乎有点极端,只是为了能够与我制作的视频一起保存一些文本文件。此外,该权限是 Android 11 特定的。如果我想支持旧的 Android 版本,我需要做什么?
我最好的选择是什么?有没有我错过的选项?
but this is not suitable because it requires a system file picker every time you want to write something
没有
使用ACTION_OPEN_DOCUMENT_TREE
让用户选择文档树。在那里,您可以创建自己的子树并将自己的文档放入该子树中。除了初始 ACTION_OPEN_DOCUMENT_TREE
请求本身之外,您不需要“系统文件选择器”。生成的文档将在卸载后继续存在。
您可以使用经典文件方法在 public 目录中创建自己的目录,例如 DCIM、图片、音乐或电影。
我正在编写一个针对 Android11 的特定用例相机应用程序。当我点击记录时,我想在某处创建一个新目录(名称基于时间戳等),其中包含结果视频以及在录制过程中也写入的一大堆其他自定义 YAML/JSON/CSV 文件(逻辑上属于录制的“输出”)。
我希望所有生成的文件都能在应用程序中存活下来 uninstall/reinstall 因为我不想让用户在卸载应用程序时丢失他们曾经记录的所有内容。如何使用 Android 11 中的新范围存储更改等执行此操作?
查看概述 here,我可以看到:
- App-specific files, App preferences and Database 显然不适合其他这些文件无法在卸载后继续存在
- 文档和其他文件使用存储访问框架,但这不合适,因为每次你想写东西时它都需要一个系统文件选择器。这会扰乱 recording/user 体验的流程,没有相机应用程序能像那样工作。
- Datasets/BlobStoreManager (here) 也不适合我的用例。
- MediaStore API 看起来应该是那个,但就生成整个输出目录而言,它似乎无法满足我的要求,包括自定义 YAML/JSON/CSV 文本文件,它们都属于同一文件。我的目标是用户在任何时候都可以简单地转到文件资源管理器,导航到适当的文件夹,然后将包含录音的文件夹复制到他们的计算机或其他任何地方,以 save/view 数据。即使 MediaStore.Files 似乎也不能保证如果您的应用程序使用分区存储,您实际上可以做到这一点。
似乎剩下的唯一选择是使用 MANAGE_EXTERNAL_STORAGE 并将数据放在主目录中我想要的任何位置,但这似乎有点极端,只是为了能够与我制作的视频一起保存一些文本文件。此外,该权限是 Android 11 特定的。如果我想支持旧的 Android 版本,我需要做什么?
我最好的选择是什么?有没有我错过的选项?
but this is not suitable because it requires a system file picker every time you want to write something
没有
使用ACTION_OPEN_DOCUMENT_TREE
让用户选择文档树。在那里,您可以创建自己的子树并将自己的文档放入该子树中。除了初始 ACTION_OPEN_DOCUMENT_TREE
请求本身之外,您不需要“系统文件选择器”。生成的文档将在卸载后继续存在。
您可以使用经典文件方法在 public 目录中创建自己的目录,例如 DCIM、图片、音乐或电影。