2015-10-01 46 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,並且相同的代碼按預期工作。 –

相關問題