부팅 완료
- 부팅이 완료되었을 때, 특정 작업을 수행하고 싶을 경우 설정
<receiver android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
화면 켬/끔
- 화면 on off를 감지하는 리시버는 매니페스트에 등록하면 실행되지 않으므로, registerReceiver()를 통해 동적으로 등록해야 한다.
class MyReceiver : BroadcastReceiver(){
override fun onReceive(p0: Context?, p1: Intent?) {
when(p1?.action){
Intent.ACTION_SCREEN_ON -> Log.d("lumine", "On")
Intent.ACTION_SCREEN_OFF -> Log.d("lumine", "Off")
}
}
}
val filter = IntentFilter(Intent.ACTION_SCREEN_ON).apply {
addAction(Intent.ACTION_SCREEN_OFF)
}
registerReceiver(receiver, filter)
배터리상태
- 배터리 낮음 / 정상 / 충전상태 / 전원 공급 시작 여부 등의 상태마다 수행된다.
class MyReceiver : BroadcastReceiver(){
override fun onReceive(p0: Context?, p1: Intent?) {
when(p1?.action){
Intent.ACTION_BATTERY_LOW -> Log.d("lumine", "LOW")
Intent.ACTION_BATTERY_OKAY -> Log.d("lumine", "OKAY")
}
}
}
- 만약 시스템이 배터리 관련 인텐트를 발생시키지 않아도 현재 배터리 상태가 필요할 경우 아래와 같이 등록할 수 있다.
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("lumine", "USB")
BatteryManager.BATTERY_PLUGGED_AC -> Log.d("lumine", "AC")
}
} else{
Log.d("lumine", "not charging")
}
val level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct = level / scale.toFloat() * 100