SD卡和系統存儲空間的計算

需要用到的權限

<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 一鍵清理 開源版,包括內存加速,緩存清理,自啓管理,軟件管理等。

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章