今天在写项目的时候发现了一个bug,后来发现是在android不同版本上存储路径不同。
查到一个这个问题:
以前的Android(4.1之前的版本)中,SDcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示存储卡,而在Jelly Bean系统中修改为了“/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);
发现输出如下:
// 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是外置的,现在看来分内置和外置sdcard
又查了一下内置和外置sdcard的区别:
. 插入一张外置SD卡后
内置SD卡路径:/storage/emulated/0
外置SD卡路径:/storage/extSdCard
- 取出外置SD卡后
内置SD卡路径:/storage/emulated/0