安卓获取手机剩余存储空间

2020-08-13  本文已影响0人  蓝不蓝编程
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
fun queryStorage() {
    val statFs = StatFs(Environment.getExternalStorageDirectory().path)

    //存储块总数量
    val blockCount = statFs.blockCount.toLong()
    //块大小
    val blockSize = statFs.blockSize.toLong()
    //可用块数量
    val availableCount = statFs.availableBlocks.toLong()
    //剩余块数量,注:这个包含保留块(including reserved blocks)即应用无法使用的空间
    val freeBlocks = statFs.freeBlocks.toLong()
    //这两个方法是直接输出总内存和可用空间,也有getFreeBytes
    //API level 18(JELLY_BEAN_MR2)引入
    val totalSize = statFs.totalBytes
    val availableSize = statFs.availableBytes
    Log.d("statfs", "total = " + getUnit(totalSize.toFloat()))
    Log.d("statfs", "availableSize = " + getUnit(availableSize.toFloat()))

    //这里可以看出 available 是小于 free ,free 包括保留块。
    Log.d("statfs", "total = " + getUnit(blockSize * blockCount.toFloat()))
    Log.d("statfs", "available = " + getUnit(blockSize * availableCount.toFloat()))
    Log.d("statfs", "free = " + getUnit(blockSize * freeBlocks.toFloat()))
}

private val units =
    arrayOf("B", "KB", "MB", "GB", "TB")

/**
 * 单位转换
 */
private fun getUnit(size: Float): String {
    var size = size
    var index = 0
    while (size > 1024 && index < 4) {
        size = size / 1024
        index++
    }
    return java.lang.String.format(Locale.getDefault(), " %.2f %s", size, units[index])
}

结果样例:
total = 113.34 GB
availableSize = 63.26 GB
total = 113.34 GB
available = 63.26 GB
free = 63.26 GB

上一篇下一篇

猜你喜欢

热点阅读