본문 바로가기

안드로이드/4대 컴포넌트

[안드로이드] BroadCast Receiver

안드로이드 4대 컴포넌트 중 하나인 브로드캐스트 리시버는 어떠한 이벤트가 발생되었을 때 그에 관한 메시지를 받을 수 있게 한다.

 

예를 들면 기기 재부팅, 핸드폰 충전 등 시스템 이벤트가 발생했을 경우 브로트캐스트를 전송하며, 이를 수신하여 작업을 처리할 수 있다.

 

이외의 자세한 내용은 공식문서를 참고 바랍니다.

https://developer.android.com/guide/components/broadcasts?hl=ko#receiving-broadcasts

 

브로드캐스트 개요  |  Android 개발자  |  Android Developers

브로드캐스트 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 앱은 Android 시스템 및 기타 Android 앱에서 게시-구독 디자인 패턴과 유사한 브로드캐

developer.android.com

 

사용 방법

충전기 연결 시 Toast 메시지 출력 예제

 

1.  MyBroadcastReceiver.kt

class MyBroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        //TODO your task
        if(Intent.ACTION_POWER_CONNECTED == intent.action){
        	Toast.makeText(context, "전원 연결 확인", Toast.LENGTH_SHORT).show()
        }
    }
}

 

 

2. Manifest

<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    </intent-filter>
</receiver>

 

intent-filter에는 수신자가 구독할 이벤트를 넣어준다.

 

그러나 API 26 이상부터는 제 한이 면제되는 몇 가지를 제외하고는 Manifest 대신 다음과 같이 선언해야 한다.

 

val br: BroadcastReceiver = MyBroadcastReceiver()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply {
    addAction(Intent.ACTION_POWER_CONNECTED)
}
registerReceiver(br, filter)

 

위의 코드는 적절한 클래스에 선언해 주면 된다. (MainActiviy 등)

 

 

브로드캐스트 전송

시스템 이벤트와 같이 브로드캐스트를 수신하는 방법도 있지만, 사용자가 버튼 클릭과 같은 어떠한 이벤트를 발생시켰을 때에도 브로드캐스트에 접근할 수 있다.

 

class MyBroadcastReceiver : BroadcastReceiver() {
    object myReceiver{
        val MY_ACTION = "com.example.test.action.ACTION_MY_BROADCAST"
    }

    override fun onReceive(context: Context, intent: Intent) {
        //TODO your task
        if(Intent.ACTION_POWER_CONNECTED == intent.action){
            Toast.makeText(context, "전원 연결 확인", Toast.LENGTH_SHORT).show()
        }
        
        if(myReceiver.MY_ACTION == intent.action){
            Toast.makeText(context, "나의 브로드캐스트", Toast.LENGTH_SHORT).show()
        }
    }
}

 

 

val br: BroadcastReceiver = MyBroadcastReceiver()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply {
    addAction(Intent.ACTION_POWER_CONNECTED)
    addAction(MyBroadcastReceiver.myReceiver.MY_ACTION)
}
registerReceiver(br, filter)

 

Intent().also { intent ->
    intent.setAction(MyBroadcastReceiver.myReceiver.MY_ACTION)
    intent.putExtra("data", "Notice me senpai!")
    sendBroadcast(intent)
}

'안드로이드 > 4대 컴포넌트' 카테고리의 다른 글

[안드로이드] Content Provider  (0) 2023.11.23