在“下载”文件夹中应用程序特定目录中的重新安装过程中持久保存文件

问题描述

我们有一个应用程序,除其他功能外,它允许用户下载文件并将其存储在本地。为了提供对文件的更大访问权限(例如,手动备份),将文件下载到“下载”目录中特定于应用程序的文件夹中。

直到Android Q,应用程序都可以简单地使用File API来检查文件是否在本地,并相应地更新UI。但是,从那时起,我们开始转向使用Mediastore API。但是,用户面临的问题之一是重新安装后无法访问下载的文件。重新安装后,该应用程序无法知道以前的安装是否剩余了文件。它永远无法正确管理该文件夹。

作用域内的存储文档说,使用SAF可以为应用提供完全访问文件夹的权限。还有另一种方法吗?如果要使用SAF,那么每次用户打开应用程序时,我们如何需要请求许可?有什么方法可以保留返回的file模式URI?有关该用例的文档很少(无论是那个文档还是我们都找不到)。

谢谢。

解决方法

对于Android 10设备,清单文件中请求旧版外部存储,并且您可以照常对“下载”文件夹具有文件访问权限。

对于Android 11设备,“下载”文件夹以旧的方式可读,甚至可以写入。无需媒体存储。

,

您可以尝试使用the shared storage。它用于共享用户数据,即使其他用户卸载了您的应用程序,该数据也可以被其他应用程序访问或保存。

要使用它,必须先获得MANAGE_EXTERNAL_STORAGE的许可。但是,当您将应用程序提交到Google Play时,这里有一些限制,请阅读here
由于COVID-19问题,无法将需要MANAGE_EXTERNAL_STORAGE权限的应用上载到Google Play。因此,现在,您可以将SDK版本定位为29,并使用requestLegacyExternalStorage标志。 2021年初之后,您可以尝试使用共享存储。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...