listFiles() 在 /storage/emulated 上返回 null

我正在 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

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


慕婉清6462132
浏览 215回答 3
3回答

HUX布斯

简短回答: 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

三国纷争

它与作用域存储有关。为了解决这个问题,写 android:requestLegacyExternalStorage="true"在清单文件的应用程序标签中,如下所示。

暮色呼如

请求权限成功后。添加这一行:android:requestLegacyExternalStorage="true"在 AndroidManifest.xml 中限定“application”的范围
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java