我正在 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 truePS我已经在清单中添加了适当的存储权限并授予了运行时权限。
3 回答
HUX布斯
TA贡献1876条经验 获得超6个赞
简短回答: 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
三国纷争
TA贡献1804条经验 获得超7个赞
它与作用域存储有关。为了解决这个问题,写
android:requestLegacyExternalStorage="true"
在清单文件的应用程序标签中,如下所示。
暮色呼如
TA贡献1853条经验 获得超9个赞
请求权限成功后。添加这一行:
android:requestLegacyExternalStorage="true"
在 AndroidManifest.xml 中限定“application”的范围
添加回答
举报
0/150
提交
取消