【问题标题】:Android 11 Storage Access and Java File LibraryAndroid 11 存储访问和 Java 文件库
【发布时间】:2021-09-15 01:02:24
【问题描述】:

我在 Playstore 上已经有一个 android 应用程序。它是一个使用 localhost 在 PC 和 Android 之间传输文件的应用程序。我在其中使用了以下 java 函数:

创建目录/文件/显示文件列表和许多其他文件功能(追加、字节读/写等):

file.mkdir
directory.listFiles();
file.createNewFile()

我也放了

 requestLegacyExternalStorage="true"

在提供足够的读/写外部存储权限后,它在 android 10 上运行良好。

但问题是这些在 android 11 上不起作用,因为 requestLegacyExternalStorage 不起作用。我使用了 MANAGE_EXTERNAL_STORAGE 并且该应用程序运行良好,但问题是 Playstore 不允许它。 (不知道他们为什么拒绝更新)

我也使用过 getExternalFilesDir,它运行良好,但不希望数据位于 android 文件夹中,如果应用被删除则删除。

我也尝试使用下载位置,它可以工作,但问题是 getExternalStorageDirectory 已被弃用:

File file = new File(Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DOWNLOADS,"FileChat");

所以我想问我如何管理/使用 android 11 的文件库来读取/写入/创建/删除文件和目录。它不应该在 android 文件夹中,因为它会在应用程序被删除后被删除。我可以像下载一样使用公共目录吗?如果可以,getExternalStorageDirectory() 的替代方法是什么?

我不需要读取用户数据。只想有一个目录,应用程序可以在其中存储文件。读取功能正在工作,因为用户使用意图选择了文件。

提前致谢。

【问题讨论】:

  • 您可以使用MediaStore API 创建一个新文件夹。您不需要requestLegacyExternalStorage,因为它不会从 A11 开始工作。我建议您阅读 Scoped Storage 一次
  • 是的,我知道。但是还有其他函数需要处理,比如附加到文件的字节。所以不想过多地更改代码。另外我猜 mediastore 仅限于媒体文件。
  • 文件传输应用?对于应用程序的文件或其他应用程序的文件?差别很大。
  • but the problem is getExternalStorageDirectory is deprecated: 是的。但这有什么关系?有用。在 Android 11 上。在 Android 12 上也是如此。如果您获得 MANAGE_EXTERNAL_STORAGE ,那么您肯定会使用它。所以它可以使用。
  • used getExternalFilesDir and it works perfect 是的,但仅适用于应用程序自己的文件。我的问题又来了:也传输其他应用的文件?

标签: java android file


【解决方案1】:

共享存储的顶级目录写入权限在 Android 11 中不可用,但您可以使用现有的文件 API 访问媒体并下载集合文件夹,如 /Pictures/Downloads/DICM 等。无法将应用程序自己的文件夹创建为顶级目录,但可以在默认集合文件夹中创建专用的子目录。

为了让您的应用在 Android 10 上按预期运行,还需要 requestLegacyExternalStorage 标志,因为仅通过 MediaStore API 限制了对 Android 10 上共享存储的访问。

【讨论】:

    【解决方案2】:

    如果传输仅用于您的应用程序自己的文件,则将它们放入

    File file = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS),"FileChat");
    

    或者使用存储访问框架让用户选择和/或在外部存储包括可移动micro sd卡上创建一个目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2016-10-14
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多