listFiles() 在 /storage/emulated 上返回 null,而 /storage/emulated/0 存在

Ami*_*deh 3 java android file-permissions android-6.0-marshmallow android-storage

我正在 android 27 模拟器上进行测试并尝试遍历一些目录。

当我尝试遍历/storage/emulated目录时,该方法会在存在时listFiles()返回。null/storage/emulated/0

这是一个测试代码:

File emuDir = new File("/storage/emulated");
File[] emuDirFiles = emuDir.listFiles(); // returns null.

File exStorageDir = new File("/storage/emulated/0")
exStorageDir.exists(); // returns true
Run Code Online (Sandbox Code Playgroud)

PS我已经在清单中添加了适当的存储权限并授予了运行时权限。

Far*_*rid 5

简短回答: Android 不会授予您的应用访问/storage/emulated.

长答案以及您的解决方案不起作用的原因:

您授予了哪些权限?我认为它们是EXTERNAL_WRITE/EXTERNAL_READ并且这些将使您可以访问与 ./storage/emulated/0返回的目录相同的目录getExternalStorageDirectory()。Android 不授予/storage/emulated. 附带说明一下,如果File.canRead()返回,false则无法listFiles()访问该目录。在您的情况下,即使您添加了权限emuDir.canRead()也会返回false,因为这些权限授予/storage/emulated/0不访问/storage/emulated