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)
}
}
실행 결과
배터리 상태를 확인할 수 있습니다
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 음악 재생 예시 만들기 (0) | 2025.03.22 |
---|---|
[Kotlin][Android] 텍스트 뷰 글 내용 변경하기 (0) | 2025.03.15 |
[Kotlin][Android] 뷰 사이즈 변경하기 (0) | 2025.03.07 |
[Kotlin][Android] ML Kit으로 QR 코드 인식하고 링크 연결하기 (0) | 2025.03.05 |
[Kotlin][Android] 뷰 가시성 변경하기 (0) | 2025.02.28 |