今天在寫項目的時候發(fā)現(xiàn)了一個bug,后來發(fā)現(xiàn)是在android不同版本上存儲路徑不同。
查到一個這個問題:
以前的Android(4.1之前的版本)中,SDcard跟路徑通過“/sdcard”或者“/mnt/sdcard”來表示存儲卡,而在Jelly Bean系統(tǒng)中修改為了“/storage/sdcard0”,以后可能還會有多個SDcard的情況。
目前為了保持和之前代碼的兼容,sdcard路徑做了link映射。
為了使您的代碼更加健壯并且能夠兼容以后的Android版本和新的設備,請通過Environment.getExternalStorageDirectory().getPath()來獲取scared路徑,
同時測試了cooled(android 4.1.2 api16)和samsung(android 4.4.2),
String dataDirectory = Environment.getDataDirectory().toString();
String downLoadCacheDirectory = Environment.getDownloadCacheDirectory().toString();
String externalStorageDirectory = Environment.getExternalStorageDirectory().toString();
String externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory("zip").toString();
String rootDirectory = Environment.getRootDirectory().getPath();
Log.d("dir_dataDirectory",dataDirectory);
Log.d("dir_downLoadCacheDir",downLoadCacheDirectory);
Log.d("dir_externalStorage",externalStorageDirectory);
Log.d("dir_externalStoragePu",externalStoragePublicDirectory);
Log.d("dir_rootDirectory",rootDirectory);
發(fā)現(xiàn)輸出如下:
// samsung
// dir_dataDirectory: /data
// dir_downLoadCacheDir: /cache
// dir_externalStorage: /storage/emulated/0
// dir_externalStoragePu: /storage/emulated/0/zip
// dir_rootDirectory: /system
// Coolpad
// dir_dataDirectory: /data
// dir_downLoadCacheDir: /cache
// dir_externalStorage: /mnt/sdcard
// dir_externalStoragePu: /mnt/sdcard/zip
// dir_rootDirectory: /system
同時samsung的型號中沒有添加外置scared
之前一直以為sdcard是外置的,現(xiàn)在看來分內置和外置sdcard
又查了一下內置和外置sdcard的區(qū)別:
. 插入一張外置SD卡后
內置SD卡路徑:/storage/emulated/0
外置SD卡路徑:/storage/extSdCard
- 取出外置SD卡后
內置SD卡路徑:/storage/emulated/0