需要用到的權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
SDCardInfo類:
public class SDCardInfo {
public long total;//總的大小
public long free;//爲使用的大小
}
StorageSize類:
public class StorageSize {
public float value;
public String suffix;//後綴
}
StorageUtil 類:
public class StorageUtil {
//storage G M K B之間的轉換
public static String convertStorage(long size) {
long kb=1024;
long mb=kb*1024;
long gb=mb*1024;
if (size>=gb){
return String.format("%.1f GB", (float) size / gb);
}else if (size >= mb) {
float f = (float) size / mb;
return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
} else if (size >= kb) {
float f = (float) size / kb;
return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
} else
return String.format("%d B", size);
}
/**
* 單位大小之間的轉換
* @param size
* @return
*/
public static StorageSize convertStorageSize(long size) {
long kb = 1024;
long mb = kb * 1024;
long gb = mb * 1024;
StorageSize sto = new StorageSize();
if (size >= gb) {
sto.suffix = "GB";
sto.value = (float) size / gb;
return sto;
} else if (size >= mb) {
sto.suffix = "MB";
sto.value = (float) size / mb;
return sto;
} else if (size >= kb) {
sto.suffix = "KB";
sto.value = (float) size / kb;
return sto;
} else {
sto.suffix = "B";
sto.value = (float) size;
return sto;
}
}
/**
* 得到SD卡的大小
* @return
*/
public static SDCardInfo getSDCardInfo() {
// String sDcString = Environment.getExternalStorageState();
if (Environment.isExternalStorageRemovable()) {
String sDcString = Environment.getExternalStorageState();
if (sDcString.equals(Environment.MEDIA_MOUNTED)) {
File pathFile = Environment
.getExternalStorageDirectory();
try {
StatFs statfs = new StatFs(
pathFile.getPath());
// 獲取SDCard上BLOCK總數
long nTotalBlocks = statfs.getBlockCount();
// 獲取SDCard上每個block的SIZE
long nBlocSize = statfs.getBlockSize();
// 獲取可供程序使用的Block的數量
long nAvailaBlock = statfs.getAvailableBlocks();
// 獲取剩下的所有Block的數量(包括預留的一般程序無法使用的塊)
long nFreeBlock = statfs.getFreeBlocks();
SDCardInfo info = new SDCardInfo();
// 計算SDCard 總容量大小MB
info.total = nTotalBlocks * nBlocSize;
// 計算 SDCard 剩餘大小MB
info.free = nAvailaBlock * nBlocSize;
return info;
} catch (IllegalArgumentException e) {
}
}
}
return null;
}
/**
* 得到系統地空間大小
* @param context
* @return
*/
public static SDCardInfo getSystemSpaceInfo(Context context) {
File path = Environment.getDataDirectory();
// File path = context.getCacheDir().getAbsoluteFile();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
long totalSize = blockSize * totalBlocks;
long availSize = availableBlocks * blockSize;
SDCardInfo info = new SDCardInfo();
info.total = totalSize;
info.free = availSize;
return info;
}
/**
* 得到root的信息
* @return
*/
public static SDCardInfo getRootSpaceInfo() {
File path = Environment.getRootDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
long totalSize = blockSize * totalBlocks;
long availSize = availableBlocks * blockSize;
// 獲取SDCard上每個block的SIZE
long nBlocSize = stat.getBlockSize();
SDCardInfo info = new SDCardInfo();
// 計算SDCard 總容量大小MB
info.total = totalSize;
// 計算 SDCard 剩餘大小MB
info.free = availSize;
return info;
}
}
以上相關信息總結於:https://github.com/joyoyao/superCleanMaster 一鍵清理 開源版,包括內存加速,緩存清理,自啓管理,軟件管理等。