Notice
Recent Posts
Recent Comments
Link
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐ŸŒฑ dreaming DiNO

[Kotlin] ์™ธ๋ถ€์ €์žฅ์†Œ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ํ™•์ธ External Memory ๋ณธ๋ฌธ

Android

[Kotlin] ์™ธ๋ถ€์ €์žฅ์†Œ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ํ™•์ธ External Memory

MK_____ 2023. 2. 10. 11:32

์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ํ˜„์žฌ ๊ธฐ๊ธฐ์˜ ์ด ์ €์žฅ ์šฉ๋Ÿ‰๊ณผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์šฉ๋Ÿ‰์ด ์–ด๋Š์ •๋„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” StatFs ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ

 

StatFs๋Š” file system์˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋กœ, ์ •๋ณด๋ฅผ ์•Œ๊ธฐ ์›ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‚ด๋ถ€์ €์žฅ์†Œ์™€ ์™ธ๋ถ€์ €์žฅ์†Œ์˜ ์šฉ๋Ÿ‰์„ ์•Œ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ๊ฐ๊ฐ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

์™ธ๋ถ€์ €์žฅ์†Œ : getDataDirectory()
๋‚ด๋ถ€์ €์žฅ์†Œ : getExternalStorageDirectory()
fun getExternalMemory() {
    BleDebugLog.i(logTag, "getExternalMemory-()")
    val externalMemory = checkExternalStorageAllMemory()
    val externalAvailableMemory = checkExternalAvailableMemory()

    externalMemory?.let {
        BleDebugLog.d(logTag, "allMemory: ${getFileSize(it)}")
    }

    externalAvailableMemory?.let {
        BleDebugLog.d(logTag, "available: ${getFileSize(it)}")
    }
}

private fun isExternalMemoryAvailable(): Boolean {
    return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
}

private fun checkExternalStorageAllMemory(): Long? {
    return if (isExternalMemoryAvailable()) {
        val stat = StatFs(Environment.getExternalStorageDirectory().path)
        val blockSize = stat.blockSizeLong
        val totalBlocks = stat.blockCountLong
        totalBlocks * blockSize
    } else {
        null
    }
}

private fun checkExternalAvailableMemory(): Long? {
    return if (isExternalMemoryAvailable()) {
        val file = Environment.getExternalStorageDirectory()
        val stat = StatFs(file.path)
        val blockSize = stat.blockSizeLong
        val availableBlocks = stat.availableBlocksLong
        availableBlocks * blockSize
    } else {
        null
    }
}

 

 

์ด ์šฉ๋Ÿ‰์„ ๊ตฌํ•œ ๋’ค, ์šฉ๋Ÿ‰ ๋‹จ์œ„์— ๋งž๊ฒŒ ๋ณ€ํ™˜
private fun getFileSize(size: Long): String {
    if (size <= 0) return "0"
    val units = arrayOf("B", "KB", "MB", "GB", "TB")
    val digitGroups = (Math.log10(size.toDouble()) / Math.log10(1024.0)).toInt()
    return DecimalFormat("#,##0.#").format(size / 1024.0.pow(digitGroups.toDouble())) + " " + units[digitGroups]
}