안드로이드/개념

[Android] Broadcast Receiver

damon-911 2023. 8. 1. 18:39

Broadcast Receiver

Broadcast는 어떤 행위에 대한 알림을 받고 방송을 해주는 기능입니다. 이 방송은 Intent를 통해 발송하게 되고, 이렇게 발송된 방송은 Broadcast Receiver 객체가 수신을 하게 됩니다.

Broadcast Receiver를 구현하는 방법에는 Manifest리시버를 선언하거나, Context직접 리시버를 구현하는 두 가지 방법이 존재합니다.

수신대상의 패키지, 클래스명을 입력하는 명시적 브로드캐스트나 몇 가지의 암시적 브로드캐스트 예외(링크)를 제외하고는 모두 Context직접 리시버를 구현해야 합니다.

  • Manifest에 등록 : 앱이 실행 중이 아니여도 이벤트를 수신하고 작업을 처리할 수 있습니다.
  • Context에 등록 : 앱이 실행 중일 때만 이벤트를 수신하고 작업을 처리할 수 있습니다.

 

Broadcast Receiver 구현하기

1. 브로드캐스트 리시버 클래스 생성

BroadcastReceiver 클래스를 상속받아 클래스를 생성합니다.

class MyBroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // intent의 action에 따라 다르게 동작
        when (intent.action) {
            Intent.ACTION_BATTERY_LOW -> {
                Toast.makeText(context, "배터리가 부족합니다.", Toast.LENGTH_SHORT).show()
            }
            
            // ...
        }
    }
}

 

2. 브로드캐스트 리시버 등록

  • Manifest에 등록
<application>
    // ...

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

    // ...
</application>
  • Context에 등록
val reciver = MyBroadcastReceiver()
val filter = IntentFilter().apply {
    addAction(Intent.ACTION_BATTERY_LOW)
}

registerRecevier(receiver, filter) // 동적으로 시스템에 등록
unregisterReveiver(receiver) // 등록 해제

 

3. 브로드캐스트 리시버 실행

sendBroadcast() 메서드를 통해 시스템에서 브로드캐스트 객체를 생성하여 리시버를 실행합니다.

val intent = Intent(this, MyBroadcastReceiver::class.java) 
sendBroadcast(intent)
728x90
반응형