我一直在nougat上开发一个应用程序,它在外部存储中创建一个目录。
我曾经这样做过:
final File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Chords/Processed Audio");
dir.mkdirs();
此代码似乎不适用于API 26(Android Oreo)。该目录未创建。
我怎样才能达到同样的效果,最好是适用于从API 21到API 26的所有Android版本?
答案 0 :(得分:7)
在运行Android 8.0的Nexus 5X上运行现有代码没有问题。使用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");
答案 1 :(得分:0)
@Daniele,见https://stackoverflow.com/a/44455957/966789 和https://stackoverflow.com/a/33031091/966789(Android为Android 6.0添加了新的权限模型(Marshmallow)。如果你的targetSdkVersion> = 23并且你在Marshmallow(或更高版本)设备上运行,你可能需要启用运行时权限。你还应该阅读有关运行时权限更改的更多信息。如果您使用的是targetSdkVersion> = 24,则还必须将FileProvider配置为本节中显示。下面的示例使用com.codepath.fileprovider并且应该与指定的权限XML标记匹配)