브로드캐스트 리시버

k_hyun·2023년 3월 7일
0

브로드캐스트 리시버

이벤트 모델로 실행되는 컴포넌트라고 정의한다.
여기서 이벤트는 부팅이 완료되는 것과 같은 시스템의 특정한 상황을 의미한다.
액티비티처럼 인텐트를 시스템에 전달함으로써 실행한다.

브로드캐스트 리시버 만들기

class MyReceiver : BroadcastReceiver() {
	override fun onReceive(context: Context, intent: Intent) {
    }
}    

BroadcastReceiver를 상속받는 클래스를 선언해야 한다.

리시버의 생명주기 함수는 onReceive() 하나뿐이며, 리시버를 실행하려고 인텐트를 시작하면 해당 함수가 자동으로 호출된다.

컴포넌트이므로 매니페스트 파일에 등록한다.

<receiver
	android:name=".MyReceiver"
    android:enabled="true"
    android:exported="true">
</receiver> 

동적 등록과 해제

val receiver = object : BroadcastReceiver() {
	override fun onReceive(context: Context?, intent: Intent?) {
    }
}

리시버 객체는 액티비티나 서비스에서 생성 가능하다.

그리고 필요한 순간에 registerReceiver() 함수를 이용해 시스템에 등록하고, 해지한다.

val filter = IntentFiter("ACTION_RECEIVER")
registerReceiver(receiver, filter)	

...

unregisterReceiver(receiver)

리시버 실행하기

val intent = Intent(this, MyReceiver::class.java)
sendBroadcast(intent)

리시버는 액티비티와는 달리 없는 리시버를 실행해도 오류가 뜨지 않으며, 여러개 실행이 가능하다.

시스템 상태

부팅 완료

부팅이 완료되면 시스템에서 android.intent.action.BOOT_COMPLETED라는 액션 문자열을 포함하는 인텐트가 발생한다.

이때 실행할 리시버에는 의 name 속성에 같은 액션 문자열을 등록한다.

<receiver
          	...>
    <intent-filter>
      	<action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>    

리시버를 실행하려면 권한이 필요하므로 매니페스트에 퍼미션을 추가해야 한다.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

화면 켬/끔

화면을 켜고 끄는 리시버는 매니페스트에 등록하면 실행되지 않는다.

따라서 registerReciver() 함수를 이용해 동적으로 등록해야 한다.

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")
			}
		}
}

배터리 상태

배터리와 관련된 정보나 상태 변화를 앱에서 감지할 수 있다.

배터리 상태가 변경되면 다음 액션 문자열로 인텐트가 발생한다.

  • BATTERY_LOW
    배터리가 낮은 상태로 변경되는 순간
  • BATTERY_OKAY
    배터리가 정상 상태로 변경되는 순간
  • BATTERY_CHANGED
    충전 상태 변경되는 순간
  • ACTION_POWER_CONNECTED
    전원이 공급되기 시작한 순간
  • ACTION_POWER_DISCONNECTED
    전원 공급을 끊은 순간

0개의 댓글