훌륭한 개발자가 되기 위하여
[Android | Kotlin] 시스템 상태 파악하기 본문
시스템에 발생하는 인텐트는 여러 종류가 있으며 부팅 완료, 화면 켬/끔, 배터리 상태 등이 있습니다.
부팅 완료
부팅이 완료되면 시스템에서는 android.intent.action.BOOT_COMPLETED라는 액션 문자열을 포함하는 인텐트가 발생합니다. 그런데 리시버를 실행하려면 권한이 필요하므로 매니페스트 파일에 퍼미션을 추가해야 합니다.
<receiver android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
화면 켬 / 끔
- 화면을 켜거나 끄는 상황을 감지하는 브로드캐스트는 매니페스트에 등록하면 실행되지 않습니다.
- regeisterReceiver( ) 함수를 이용해 동적으로 등록해야 합니다.
- android.intent.action.SCREEN_ON과 android.intent.action.SCREEN_OFF 액션 문자열 사용
// 화면 켬/끔 리시버
receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
Intent.ACTION_SCREEN_ON -> Log.d("kim", "screen on")
Intent.ACTION_SCREEN_OFF -> Log.d("kim", "screen off")
}
}
}
// 리시버 등록
val filter = IntentFilter(Intent.ACTION_SCREEN_ON).apply {
addAction(Intent.ACTION_SCREEN_OFF)
}
registerReceiver(receiver, filter)
배터리 상태
안드로이드 시스템에서 배터리 상태가 변경되면 다음 액션 문자열로 인텐트가 발생
- BATTERY_LOW : 배터리가 낮은 상태로 변경되는 순간
- BATTERY_OKAY : 배터리가 정상 상태로 변경되는 순간
- BATTERY_CHANGED : 충전 상태가 변경되는 순간
- ACTION_POWER_CONNECTED : 전원이 공급되기 시작한 순간
- ACTION_POWER_DISCONNECTED : 전원 공급을 끊은 순간
// 배터리 상태 리시버
receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (Intent?.action) {
Intent.ACTION_BATTERY_OKAY -> Log.d("kim", "ACTION_BATTERY_OKAY")
Intent.ACTION_BATTERY_LOW -> Log.d("kim", "ACTION_BATTERY_LOW")
Intent.ACTION_BATTERY_CHANGED -> Log.d("kim", "ACTION_BATTERY_CHANGED")
Intent.ACTION_POWER_CONNECTED -> Log.d("kim", "ACTION_POWER_CONNECTED")
Intent.ACTION_POWER_DISCONNECTED -> Log.d("kim", "ACTION_POWER_DISCOMECTED")
}
}
}
배터리 정보
// 시스템 인텐트 없이 배터리 상태 파악하기
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
val batteryStatus = registerReceiver(null, intentFilter)
// 인텐트의 엑스트라를 이용해 배터리 상태 파악하기
val status = batteryStatus!!.getIntExtra(BatteryManager.EXTRA_STATUS,-1)
if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
// 전원이 공급되고 있다면
val chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1)
when (chargePlug) {
BatteryManager.BATTERY_PLUGGED_USB -> Log.d("kim", "usb charge")
BatteryManager.BATTERY_PLUGGED_AC -> Log.d("kim", "ac charge")
}
} else {
// 전원이 공급되고 있지 않다면
Log.d("kim", "not charging")
}
배터리가 얼마나 충전되었는지 알고 싶은 경우
// 배터리 충전량을 퍼센트로 출력
val level = batteryStatus.getInExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale = batteryStatus.getInExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct = level / scale.toFloat() * 100
Log.d("kim", "batteryPct : $batteryPct")
'안드로이드' 카테고리의 다른 글
[Android | Kotlin] 바인딩 서비스 (0) | 2023.12.29 |
---|---|
[Android | Kotlin] 서비스 이해하기 (0) | 2023.12.29 |
[Android | Kotlin] 브로드캐스트 리시버 이해하기 (0) | 2023.12.28 |
[Android | Kotlin] 액티비티 ANR 문제와 코루틴 (0) | 2023.12.27 |
[Android | Kotlin] 태스크 관리 (0) | 2023.12.27 |