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;
}