我正在尝试列出具有SDCard的模拟器的Downloads文件夹中的所有文件。 现在当我这样做时
File file = Environment.getExternalStorageDirectory();
file
的值是“/ storage / 18E2-1B1D / Download”
如果我file.listFiles()
,则返回null
。
我不明白这意味着什么,18E2-1B1D? 我是否必须为模拟器和设备编写单独的代码? 我已设置所有可能的权限,但它无法正常工作。 我还检查了所有stackoverflow线程。
答案 0 :(得分:1)
如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。
最有可能file
表示目录。可能它还没有存在或者权限被拒绝,导致I / O错误。
18E2-1B1D
只是SD卡的标识符,因此您不必担心这一点。最后,如果您只使用高级API,仿真器和设备的工作方式应该相同。
但在Android api级别23中,权限模型已更改。现在,您需要在运行时request permissions。电话
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
应该返回PackageManager.PERMISSION_GRANTED
。如果没有,您需要致电
requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, id);
并在onRequestPermissionsResult (int, String[], int[])中异步处理结果。
仍需要在清单中定义权限。
如果您想使用WRITE_EXTERNAL_STORAGE
,只需在代码中进行调整即可。