2015-10-01 47 views
1

我想列出具有SDCard的模拟器的下载文件夹中的所有文件。 现在,当我做到这一点Android api level 23,如何读取模拟器上的文件?

File file = Environment.getExternalStorageDirectory(); 

file值为 “/存储/ 18E2-1B1D /下载”

如果我做file.listFiles()返回null

我不明白这是什么意思,18E2-1B1D? 我是否必须为仿真器和设备编写单独的代码? 我已经设置了所有可能的权限,但它不起作用。 我也检查了所有的stackoverflow线程。

回答

1

File.listFiles()方法

返回null如果此抽象路径名不表示一个目录,或者如果发生I/O错误。

最有可能的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,只需在代码中调整它即可。

+0

Environment.getExternalStorageDirectory()。isDirectory()是真的,所以它是一个实际的目录? “它还没有存在”是什么意思? –

+0

'Environment.getExternalStorageDirectory()。exists()'返回什么? – tynn

+0

感谢tynn,但问题是API级别。看来api 23级还不稳定。我下移到api 19,并且相同的代码按预期工作。 –

相关问题