Получить объем внутренней памяти бесплатно / всего / доступно - PullRequest
0 голосов
/ 12 марта 2020

Здравствуйте, я пытаюсь получить общий объем устройства и объем свободной внутренней памяти, используя метод ниже. но он возвращает мне неправильные значения:

 fun totalMemory(): Long {
    val statFs = StatFs(Environment.getRootDirectory().absolutePath)
    return (statFs.blockCount * statFs.blockSize).toLong()
}

fun freeMemory(): Long {
    val statFs = StatFs(Environment.getRootDirectory().absolutePath)
    return (statFs.availableBlocks * statFs.blockSize).toLong()
}

fun busyMemory(): Long {
    val statFs = StatFs(Environment.getRootDirectory().absolutePath)
    val total = (statFs.blockCount * statFs.blockSize).toLong()
    val free = (statFs.availableBlocks * statFs.blockSize).toLong()
    return total - free
}

Я использую метод ниже для преобразования значений в удобочитаемую форму:

fun floatForm(d: Double): String {
    return DecimalFormat("#.##").format(d)
}


fun bytesToHuman(size: Long): String? {
    val Kb = 1 * 1024.toLong()
    val Mb = Kb * 1024
    val Gb = Mb * 1024
    val Tb = Gb * 1024
    val Pb = Tb * 1024
    val Eb = Pb * 1024
    if (size < Kb) return floatForm(size.toDouble()) + " byte"
    if (size >= Kb && size < Mb) return floatForm(size.toDouble() / Kb) + " Kb"
    if (size >= Mb && size < Gb) return floatForm(size.toDouble() / Mb) + " Mb"
    if (size >= Gb && size < Tb) return floatForm(size.toDouble() / Gb) + " Gb"
    if (size >= Tb && size < Pb) return floatForm(size.toDouble() / Tb) + " Tb"
    if (size >= Pb && size < Eb) return floatForm(size.toDouble() / Pb) + " Pb"
    return if (size >= Eb) floatForm(size.toDouble() / Eb) + " Eb" else "???"
}

мне нужно получить фактический свободный / общий внутренний размер ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...