본문 바로가기
안드로이드 코틀린

[Kotlin][Android] 배터리 상태 보기

by teamnova 2025. 3. 28.
728x90

오늘은 배터리 상태를 보여주는 예시를 만들어 보겠습니다

 

 

 

 

 

레이아웃 xml 파일 코드(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="배터리 정보"
        android:textSize="24sp"
        android:textStyle="bold"
        android:layout_marginBottom="32dp"/>

    <TextView
        android:id="@+id/batteryLevelText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="배터리 잔량: ---%"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#EEEEEE"
        android:layout_marginBottom="8dp"/>

    <TextView
        android:id="@+id/batteryStatusText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="상태: ---"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#EEEEEE"
        android:layout_marginBottom="8dp"/>

    <TextView
        android:id="@+id/batteryHealthText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="건강 상태: ---"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#EEEEEE"
        android:layout_marginBottom="8dp"/>

    <TextView
        android:id="@+id/batteryTechText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="배터리 타입: ---"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#EEEEEE"
        android:layout_marginBottom="8dp"/>

    <TextView
        android:id="@+id/batteryTempText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="온도: ---°C"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#EEEEEE"
        android:layout_marginBottom="8dp"/>

    <TextView
        android:id="@+id/batteryVoltageText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="전압: ---V"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#EEEEEE"/>

</LinearLayout>

 

 

 

 

 

 

 

액티비티 코틀린 코드

class MainActivity : AppCompatActivity() {

    private lateinit var batteryLevelText: TextView
    private lateinit var batteryStatusText: TextView
    private lateinit var batteryHealthText: TextView
    private lateinit var batteryTechText: TextView
    private lateinit var batteryTempText: TextView
    private lateinit var batteryVoltageText: TextView

    //배터리 정보를 수신할 BroadcastReceiver
    private val batteryReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if (intent.action == Intent.ACTION_BATTERY_CHANGED) {
                updateBatteryInfo(intent)
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // UI 요소 초기화
        batteryLevelText = findViewById(R.id.batteryLevelText)
        batteryStatusText = findViewById(R.id.batteryStatusText)
        batteryHealthText = findViewById(R.id.batteryHealthText)
        batteryTechText = findViewById(R.id.batteryTechText)
        batteryTempText = findViewById(R.id.batteryTempText)
        batteryVoltageText = findViewById(R.id.batteryVoltageText)
    }

    private fun updateBatteryInfo(intent: Intent) {
        // 배터리 레벨(배터리 충전량)
        val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
        val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
        val batteryPct = level * 100 / scale
        batteryLevelText.text = "배터리 잔량: $batteryPct%"

        // 배터리 전력 공급 상태
        val status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
        val statusText = when (status) {
            BatteryManager.BATTERY_STATUS_CHARGING -> "충전 중"
            BatteryManager.BATTERY_STATUS_DISCHARGING -> "방전 중"
            BatteryManager.BATTERY_STATUS_FULL -> "완전 충전됨"
            BatteryManager.BATTERY_STATUS_NOT_CHARGING -> "충전되지 않음"
            else -> "알 수 없음"
        }
        batteryStatusText.text = "상태: $statusText"

        // 배터리 컨디션
        val health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, -1)
        val healthText = when (health) {
            BatteryManager.BATTERY_HEALTH_GOOD -> "양호"
            BatteryManager.BATTERY_HEALTH_OVERHEAT -> "과열"
            BatteryManager.BATTERY_HEALTH_DEAD -> "손상됨"
            BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> "과전압"
            BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE -> "불특정 실패"
            BatteryManager.BATTERY_HEALTH_COLD -> "온도 낮음"
            else -> "알 수 없음"
        }
        batteryHealthText.text = "건강 상태: $healthText"

        // 배터리 타입
        val technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY) ?: "알 수 없음"
        batteryTechText.text = "배터리 타입: $technology"

        // 배터리 온도
        val temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1) / 10.0
        batteryTempText.text = "온도: ${temperature}°C"

        // 배터리 전압
        val voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1) / 1000.0
        batteryVoltageText.text = "전압: ${voltage}V"
    }

    override fun onStart() {
        super.onStart()
        // 배터리 상태 변화 수신을 위한 IntentFilter 등록
        val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
        registerReceiver(batteryReceiver, filter)
    }

    override fun onStop() {
        super.onStop()
        // 액티비티가 화면에서 사라질 때 리시버 해제
        unregisterReceiver(batteryReceiver)
    }
}

 

 

 

 

실행 결과

 

 

배터리 상태를 확인할 수 있습니다