gpt4 book ai didi

安卓10 : What are my options to save files on external storage into a directory called "/sdcard/my-app/"

转载 作者:行者123 更新时间:2023-12-04 08:01:44 25 4
gpt4 key购买 nike

在 Android Pie 之前,我总是将应用程序需要存储的文件存储在 /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 中,这种方法已经崩溃。我无法将网站图标添加到图像媒体文件夹中,因为它们不是真实图像,它们会不必要地使 View 困惑,并且可能会因为这样做而禁止我的开发者帐户进入 Play 商店。我也不想将所有这些数据存储在 App-Private 目录中,因为当应用程序被卸载时它会被删除,而且像资源管理器这样的其他应用程序无法访问它们。

我有哪些选择?手动选择文件或目录不是一种选择,除非只需要选择一次目录,然后永久授予访问权限(读取和写入文件)。

我从不在 /sdcard/my-app/ 之外阅读或写作.

最佳答案

在 Android Q 中,对于私有(private)文件夹之外的应用程序,默认情况下禁用直接文件访问。您可以在以下情况下使用以下几种策略:

  • 使用 list 选项 requestLegacyExternalStorage有旧的行为,但它不再适用于 Android R,所以它确实是一个短期的解决方案;
  • 使用 getExternalFilesDir() 保存文件方法。这是您的私有(private)文件夹,其他应用只有拥有 READ_EXTERNAL_STORAGE 才能访问这些文件允许。在这种情况下,最好使用 FileProvider授予对您文件的其他应用程序的访问权限。
  • 使用方法getPrimaryStorageVolume().createOpenDocumentTreeIntent()类(class) StorageManager请求访问外部主卷。在这种情况下,您需要用户同意,您将无法使用 File无论如何直接使用 api,但使用 DocumentFile类你有一个非常相似的接口(interface),所以这是更接近旧行为的解决方案。如果您需要在前台和后台执行操作,即没有用户交互,但请求权限的第一次交互除外。

  • 我链接 Flipper第 3 点的库,它有助于管理文件,如旧 android 版本。

    关于安卓10 : What are my options to save files on external storage into a directory called "/sdcard/my-app/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57788878/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com