이 글은 『Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린』교재를 바탕으로 작성되었습니다.
class MyReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent){
//기기의 부팅이 완료되었을 때 수행하고 싶은 작업 작성
}
}
<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">
val receiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when(intent?.action) { //화면이 켜지거나 꺼졌을 때 이하 작동
Intent.ACTION_SCREEN_ON -> Log.d("kkang", "screen on")
Intent.ACTION_SCREEN_OFF -> Log.d("kkang", "screen off")
}
}
}
val filter = IntentFilter(Intent.ACTION_SCREEN_ON).apply {
addAction(Intent.ACTION_SCREEN_OFF)
}//화면이 꺼지거나 켜질 때
//BroadcastReceiver가 실행된다는 정보를 담은 인텐트 필터
registerReceiver(receiver, filter)
unregisterReceiver(receiver)
val receiver = object:BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when(intent?.action) {
Intent.ACTION_BATTERY_OKAY -> Log.d("kkang", "ACTION_BATTERY_OKAY")
Intent.ACTION_BATTERY_LOW -> Log.d("kkang", "ACTION_BATTERY_LOW")
Intent.ACTION_BATTERY_CHANGED -> Log.d("kkang", "ACTION_BATTERY_CHANGED")
Intent.ACTION_POWER_CONNECTED -> Log.d("kkang", "ACTION_POWER_CONNEDCTED")
Intent.ACTION_POWER_DISCONNECTED -> Log.d("kkang", "ACTION_POWER_OKAY")
}
}
}
val filter = IntentFilter(Intent.ACTION_BATTERY_LOW).apply {
addAction(Intent.ACTION_BATTERY_OKAY)
addAction(Intent.ACTION_BATTERY_CHANGED)
addAction(Intent.ACTION_POWER_CONNECTED)
addAction(Intent.ACTION_POWER_DISCONNECTED)
}
registerReceiver(receiver, filter)
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
val batteryStatus = registerReceiver(null, intentFilter)
registerReceiver()
의 receiver
에 null값 전달.registerReceiver()
를 사용한다.registerReceiver()
의 반환값인 인텐트 객체에 엑스트라 정보로 등록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("kkang", "usb charge")
BatteryManager.BATTERY_PLUGGED_AC -> Log.d("kkang", "ac charge")
} else {
Log.d("kkang", "not charging")
}
}
!!
는 객체가 널일 때 예외를 일으키는 연산자이다.BatteryManager.EXTRA_STATUS
는 Intent.ACTION_BATTERY_CHANGED
의 추가 정보로 현재 배터리 상태 정보를 담고있다.val level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct = level / scale.toFloat() * 100
Log.d("kkang", "batteryPct : $batteryPct")
EXTRA_LEVEL
: Intent.ACTION_BATTERY_CHANGED
의 추가 정보로 현재의 배터리 레벨 정보가 담겨있다.EXTRA_SCALE
: Intent.ACTION_BATTERY_CHANGED
의 추가 정보로 최대 배터리 레벨 정보가 담겨있다.