繁体   English   中英

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

[英]listFiles() returns null on /storage/emulated, while /storage/emulated/0 exists

我正在 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 我在清单中添加了适当的存储权限并授予了运行时权限。

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

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

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

它与作用域存储有关。 为了解决这个问题,写

 android:requestLegacyExternalStorage="true"

在清单文件的应用程序标签中,如下所示。

解决方案

更多信息: https : //medium.com/@pednekarshashank33/android-10s-scoped-storage-image-picker-gallery-camera-d3dcca427bbf

请求权限成功后。 添加这一行:

android:requestLegacyExternalStorage="true"

在 AndroidManifest.xml 中确定“应用程序”的范围

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM