为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2023-07-19 10:37:16
我正在 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


查看完整回答
反对 回复 2023-07-19
?
三国纷争

TA贡献1804条经验 获得超7个赞

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

 android:requestLegacyExternalStorage="true"

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

//img1.sycdn.imooc.com/64b74c9d0001958819201081.jpg

查看完整回答
反对 回复 2023-07-19
?
暮色呼如

TA贡献1853条经验 获得超9个赞

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

android:requestLegacyExternalStorage="true"

在 AndroidManifest.xml 中限定“application”的范围


查看完整回答
反对 回复 2023-07-19
  • 3 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信