Android Oreo (API 26) - 在外部存储中创建目录

Android Oreo (API 26) - Create dir in external storage

我在牛轧糖上开发了一个应用程序,它在外部存储中创建了一个目录。

我以前是这样做的:

final File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Chords/Processed Audio");
dir.mkdirs();

此代码似乎不适用于 API 26 (Android Oreo)。目录未创建。

我怎样才能实现同样的目标,最好是适用于从 API 21 到 API 26 的所有 android 版本?

我没问题 运行 您在 Nexus 5X 上的现有代码 运行 Android 8.0。使用 adb shell ls /storage/emulated/0,我看到 Chores/,在里面我看到 Processed Audio/。这是针对具有 WRITE_EXTERNAL_STORAGE 权限的应用,包括运行时权限。

也就是说,理想情况下,不要使用字符串连接来创建 File 对象。相反,使用:

final File dir = new File(new File(Environment.getExternalStorageDirectory(), "Chords"), "Processed Audio");

@Daniele,见(Android 为 Android 6.0 (Marshmallow) 添加了新的权限模型。如果您的 targetSdkVersion >= 23 并且您 运行 在 Marshmallow(或更高版本)设备上,您可能需要启用运行时权限。您还应该阅读有关运行时权限更改的更多信息。如果您使用的 targetSdkVersion >= 24,则还必须配置一个 FileProvider,如本节所示。下面的示例使用 com.codepath.fileprovider 和应该匹配指定的权限 XML 标签)