[英]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.