如何在 Android 10 中创建 public folder/file

How to create a public folder/file in Android 10

Android Api 29 在文件和文件夹方面有很大的变化。 到目前为止,我还没有找到在 public 可见的内部存储中创建文件夹的方法。 我创建的每个文件夹只能由我的应用程序看到。

我写了一个应用程序来创建数据文件,其他应用程序可以获取这些文件,例如 Total Commander 将它们复制到目的地。 在我激活 Api 29 之前一切正常。我的一些客户确实使用 Pixel 手机,他们使用 Android 10.

如何在 Android 10 中创建 public 的文件夹和文件?

这已被弃用:

Environment.getExternalStorageDirectory();
Environment.getExternalStoragePublicDirectory(type);

当我使用

File root = context.getExternalFilesDir(null);

创建的文件只能被我的应用程序看到。 我怎样才能实现 Android 10 之前有效的行为?

提前致谢。

when I use File root = context.getExternalFilesDir(null); The created files can only be seen by my app

如果用户选择您放置在该目录中的文档,任何使用存储访问框架的应用程序(例如 ACTION_OPEN_DOCUMENT)都可以看到它们。

I write an app that creates data files that shall be picked up by other apps

其他应用无法访问 Android 10 上的外部或可移动存储,除了在 getExternalFilesDir() 等有限目录中或通过非文件系统方式(ACTION_OPEN_DOCUMENTMediaStore).

How can I create a folder and files in Android 10 that are public?

Context 上使用 getExternalFilesDir() 和相关方法。或者,使用 ACTION_CREATE_DOCUMENTACTION_OPEN_DOCUMENT_TREE 并使用存储访问框架。在任何一种情况下,生成的文档都可以供其他也使用存储访问框架的应用程序使用。

从Android10开始,应该使用SAF,让用户使用ACTION_OPEN_DOCUMENT_TREE选择目录。

如果你需要一个简单的例子。你可以找到它here

或者,如果您的应用不是新发布的,您可以在清单中使用 requestLegacyExternalStorage = true。但是,这不应该用于未来的版本,因为这是 Google.

提供的短期解决方案

注意:在 Android 的未来版本中,用户将无法选择整个外部文件目录和下载目录,因此很遗憾,请记住,我们将无法访问这些目录,因为出色地!如需更多信息,您可以点击here