๐ฑ dreaming DiNO
[Kotlin] ์ธ๋ถ์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋ ํ์ธ External Memory ๋ณธ๋ฌธ
์๋๋ก์ด๋์์ ํ์ฌ ๊ธฐ๊ธฐ์ ์ด ์ ์ฅ ์ฉ๋๊ณผ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฉ๋์ด ์ด๋์ ๋ ํ์ธํ๊ธฐ ์ํด์๋ 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]
}