Android Tools Git地址: https://github.com/wisesun7/AndroidTools.git
本篇提供獲取整機存儲空間的方法,通過StatFs獲取BlockCount和BlockSize計算各種空間。分別可獲取當前剩餘空間,系統佔用空間,及Data分區的總空間,那麼已用空間就可用總空間減去剩餘空間得到。
需要注意的是,這裏的剩餘可用、系統佔用和總空間之間沒有累計和絕對相等的關係,一般廠商會把總空間直接定義成固定值,而將剩餘空間和系統佔用空間用此方法獲取真實值,然後通過【固定值-真實值】的方式展示已用空間。 這樣做的好處是用戶看到的總空間會和規格書中顯示的一致,而剩餘空間使用的是真實值,因此,在使用上也不會出現顯示與實際使用不對應的關係。
/**
* 獲取當前可用空間
* @return
*/
public static float getAvailableSpace() {
File file = Environment.getDataDirectory();
StatFs sf = new StatFs(file.getPath());
long blocks = sf.getAvailableBlocksLong();
long blockSpace = sf.getBlockSizeLong();
float space = (blocks * blockSpace * 1.0f) / (1024 * 1024 * 1024);
Log.d(TAG, "getAvailableSpace: " + Math.round(space * 100) / 100);
return (float) Math.round(space * 100) / 100;
}
/**
* 獲取系統佔用空間
* @return
*/
public static float getSystemSpace() {
File file = Environment.getRootDirectory();
StatFs sf = new StatFs(file.getPath());
long blocks = sf.getAvailableBlocksLong();
long blockSpace = sf.getBlockSizeLong();
float space = (blocks * blockSpace * 1.0f) / (1024 * 1024 * 1024);
Log.d(TAG, "getAvailableSpace: " + Math.round(space * 100) / 100);
return (float) Math.round(space * 100) / 100;
}
/**
* 獲取總空間(不包含系統佔用)
* @param context
* @return
*/
public static long getRomTotalSize(Context context) {
File rom = Environment.getDataDirectory();
StatFs statFs = new StatFs(rom.getPath());
long totalSpace = statFs.getTotalBytes();
return totalSpace;
}