Получить общий объем внутренней памяти устройства - PullRequest
0 голосов
/ 08 июня 2018

У меня устройство HTC с объемом внутренней памяти телефона 16 ГБ, но приведенный ниже код показывает только 14 ГБ.Я хочу найти общий объем внутренней памяти устройства.Следующий код показывает только объем внутренней памяти, доступной пользователю, а не выделенный системой размер.

    File path = Environment.getRootDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSizeLong();
    long totalBlocks = stat.getBlockCountLong();
    long rootCount=totalBlocks * blockSize;
    Log.e("getRootDirectory",humanReadableByteCount(rootCount,true));

    File dataPath = Environment.getDataDirectory();
    StatFs dataStat = new StatFs(dataPath.getPath());
    long dataCount=dataStat.getBlockCountLong() * 
    dataStat.getBlockSizeLong();
    Log.e("getDataDirectory",humanReadableByteCount(dataCount,true));

    File dwnldPath = Environment.getDownloadCacheDirectory();
    StatFs dwnldStat = new StatFs(dwnldPath.getPath());
    long dwnldCount=dwnldStat.getBlockCountLong() * 
    dwnldStat.getBlockSizeLong();

         /*
    File extPath = Environment.getExternalStorageDirectory();
    StatFs extStat = new StatFs(extPath.getPath());
    long extCount=extStat.getBlockCountLong() * 
   extStat.getBlockSizeLong();

    */
    long total=rootCount+dataCount+dwnldCount;

Кто-нибудь знает, как найти точный объем внутренней памяти устройства (размер внутренней памяти телефона + размер области системы)

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Используйте приведенный ниже код, который вы получаете внутреннюю, внешнюю, а также оперативную память:

public static boolean externalMemoryAvailable() {
    return android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED);
}

public static String getAvailableInternalMemorySize() {
    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSizeLong();
    long availableBlocks = stat.getAvailableBlocksLong();
    return formatSize(availableBlocks * blockSize);
}

public static String getTotalInternalMemorySize() {
    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSizeLong();
    long totalBlocks = stat.getBlockCountLong();
    return formatSize(totalBlocks * blockSize);
}

public static String getAvailableExternalMemorySize() {
    if (externalMemoryAvailable()) {
        File path = Environment.getExternalStorageDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSizeLong();
        long availableBlocks = stat.getAvailableBlocksLong();
        return formatSize(availableBlocks * blockSize);
    } else {
        return ERROR;
    }
}

public static String getTotalExternalMemorySize() {
    if (externalMemoryAvailable()) {
        File path = Environment.getExternalStorageDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSizeLong();
        long totalBlocks = stat.getBlockCountLong();
        return formatSize(totalBlocks * blockSize);
    } else {
        return ERROR;
    }
}

public static String formatSize(long size) {
    String suffix = null;

    if (size >= 1024) {
        suffix = "KB";
        size /= 1024;
        if (size >= 1024) {
            suffix = "MB";
            size /= 1024;
        }
    }

    StringBuilder resultBuffer = new StringBuilder(Long.toString(size));

    int commaOffset = resultBuffer.length() - 3;
    while (commaOffset > 0) {
        resultBuffer.insert(commaOffset, ',');
        commaOffset -= 3;
    }

    if (suffix != null) resultBuffer.append(suffix);
    return resultBuffer.toString();
}

Размер оперативной памяти

ActivityManager actManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
MemoryInfo memInfo = new ActivityManager.MemoryInfo();
actManager.getMemoryInfo(memInfo);
long totalMemory = memInfo.totalMem;
0 голосов
/ 08 июня 2018

попробуйте этот способ найти память

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
...