BroadCast?
안드로이드 브로드캐스트는 안드로이드 애플리케이션에서 발생하는 시스템 또는 사용자 정의 이벤트에 대한 알림을 수신하는 구성 요소입니다. 브로드캐스트 리시버는 안드로이드 애플리케이션 간의 통신, 시스템 이벤트 처리, 외부 애플리케이션의 이벤트 수신 등 다양한 용도로 사용됩니다.
예를 들어 시스템 부팅 또는 기기 충전 시작과 같은 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 전송합니다. 또한 앱은 맞춤 브로드캐스트를 전송하여 다른 앱이 관심을 가질만한 사항(예: 일부 새로운 데이터가 다운로드됨)을 관련 앱에 알릴 수 있습니다.
예제
아래 예제는 부팅이 완료되었을 때 브로드캐스트 수신을 하는 예제 입니다.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
...
<receiver android:name=".receiver.BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
BOOT_COMPLETED
는 앱이 부팅 완료 브로드캐스트를 받을 수 있는 권한입니다.해당 권한을 선언하고, <receiver>
를 통해서 브로드캐스트 리시버를 정의합니다. name 속성은 리시버 클래스의 경로를 지정합니다.
<intent-filter>
는 리시버가 어떤 종류의 브로드캐스트 인텐트를 수신할지 지정합니다.
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Timber.d("onReceive")
Timber.d(intent?.action)
if(intent?.action.equals("android.intent.action.BOOT_COMPLETED")) {
//부팅이 완료되었다면 어떤 동작을 수행할지 처리
}
}
}
이 클래스는 BroadcastReceiver
를 상속받습니다. onReceive
메서드는 부팅 완료 브로드캐스트를 수신했을 때 호출되는 메서드입니다. 따라서 부팅이 완료 되었을 때 필요한 동작을 onReceive
내부에 구현하면 됩니다.
private const val TAG = "MyBroadcastReceiver"
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
StringBuilder().apply {
append("Action: ${intent.action}\n")
append("URI: ${intent.toUri(Intent.URI_INTENT_SCHEME)}\n")
toString().also { log ->
Log.d(TAG, log)
Toast.makeText(context, log, Toast.LENGTH_LONG).show()
}
}
}
}
BroadcastReceiver 인스턴스
생성 val br: BroadcastReceiver = MyBroadcastReceiver()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply
{
addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED)
}
registerReceiver(br, filter)
컨텍스트에 등록된 수신자는 등록 컨텍스트가 유효한 동안 브로드캐스트를 수신합니다.
브로드캐스트 수신을 중지하려면 unregisterReceiver(android.content.BroadcastReceiver)
를 호출합니다. 이때 onCreate
에 등록했다면 onDestroy()
에서, onResume()
에 등록했다면 onPause()
에서 수신을 중지해야합니다.
참고
https://developer.android.com/guide/components/broadcasts?hl=ko