首页 > 解决方案 > Android 11 存储访问和 Java 文件库

问题描述

我在 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() 的替代方法是什么?

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

提前致谢。

标签: javaandroidfile

解决方案


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

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


推荐阅读