在 Android Pie 之前,我一直将应用程序需要存储的文件存储在
当我卸载应用程序后,我可以重新安装它,并且仍然可以使用所有的网站图标、截图和备份来恢复状态,而无需重新下载所有网站图标(并有可能丢失其他数据)。
我还可以轻松地创建
我还可以使用文件浏览器查看该目录中的文件,并选择将它们发送电子邮件或复制到 Google Drive,或者专门删除其中一些文件(如旧备份文件)。自 Android 10 开始,这种方法已经不再可行。我无法将图标添加到“Images Media-Folder”中,因为它们不是真正的图片,这会使视图变得杂乱无序,可能会导致我的开发者帐户因此被 Play Store 禁止。我也不想将所有这些数据存储在应用程序专用目录中,因为当应用被卸载时,这些数据将被删除,并且像文件浏览器之类的其他应用程序也无法访问它们。
那么我的选择是什么?手动选择文件或目录不是一个选项,除非只需要选择一次目录,然后永久授权访问(读写文件)。
我从未在 /sdcard/my-app/ 之外读取或写入过任何内容。
/sdcard/my-app/
中,可以通过以下方式获取:
File fBaseDir = new File(Environment.getExternalStorageDirectory(), "my-app");
我的一个应用程序在 /sdcard/my-app/favicons
中存储了数百个(多达数千个)网站图标,在用户备份该应用程序时,它会被存储在 /sdcard/my-app/backups
中。通过 Google Chrome 共享给我的应用程序的网页截图存储在 /sdcard/my-app/screenshots
中。当我卸载应用程序后,我可以重新安装它,并且仍然可以使用所有的网站图标、截图和备份来恢复状态,而无需重新下载所有网站图标(并有可能丢失其他数据)。
我还可以轻松地创建
/sdcard/my-app/
目录的备份,将其复制到我的 PC 中,并在另一台手机上恢复它,例如当我迁移到新设备时。我还可以使用文件浏览器查看该目录中的文件,并选择将它们发送电子邮件或复制到 Google Drive,或者专门删除其中一些文件(如旧备份文件)。自 Android 10 开始,这种方法已经不再可行。我无法将图标添加到“Images Media-Folder”中,因为它们不是真正的图片,这会使视图变得杂乱无序,可能会导致我的开发者帐户因此被 Play Store 禁止。我也不想将所有这些数据存储在应用程序专用目录中,因为当应用被卸载时,这些数据将被删除,并且像文件浏览器之类的其他应用程序也无法访问它们。
那么我的选择是什么?手动选择文件或目录不是一个选项,除非只需要选择一次目录,然后永久授权访问(读写文件)。
我从未在 /sdcard/my-app/ 之外读取或写入过任何内容。
android:requestLegacyExternalStorage
模式,尽管这是暂时的。第二种方法是使用SAF,让用户选择根目录并授予您的应用程序访问权限,然后您可以使用DocumentFile
处理复制、移动和其他操作。 - Darshanandroid:requestLegacyExternalStorage
在开发过程中会很有用。使用 SAF 授权访问是永久的吗? - Daniel Fandroid:requestLegacyExternalStorage
will work on production too, untill the next major release. About the SAF permission being permanent, you can save theUri
that you get inonActivityResult()
and usegrantPermission()
andgetContentResolver().takePersistableUriPermission()
- Darshan