Здравствуйте, я пытаюсь получить общий объем устройства и объем свободной внутренней памяти, используя метод ниже. но он возвращает мне неправильные значения:
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 "???"
}
мне нужно получить фактический свободный / общий внутренний размер ,