Android api等级23,如何在模拟器上读取文件?

时间:2015-10-01 19:58:21

标签: android

我正在尝试列出具有SDCard的模拟器的Downloads文件夹中的所有文件。 现在当我这样做时

 File file = Environment.getExternalStorageDirectory();

file的值是“/ storage / 18E2-1B1D / Download”

如果我file.listFiles(),则返回null

我不明白这意味着什么,18E2-1B1D? 我是否必须为模拟器和设备编写单独的代码? 我已设置所有可能的权限,但它无法正常工作。 我还检查了所有stackoverflow线程。

1 个答案:

答案 0 :(得分:1)

File.listFiles()方法

  

如果此抽象路径名不表示目录,或者发生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,只需在代码中进行调整即可。