BroadCast

BongKu·2023년 6월 27일
0

Android

목록 보기
10/30
post-thumbnail

BroadCast?

안드로이드 브로드캐스트는 안드로이드 애플리케이션에서 발생하는 시스템 또는 사용자 정의 이벤트에 대한 알림을 수신하는 구성 요소입니다. 브로드캐스트 리시버는 안드로이드 애플리케이션 간의 통신, 시스템 이벤트 처리, 외부 애플리케이션의 이벤트 수신 등 다양한 용도로 사용됩니다.

예를 들어 시스템 부팅 또는 기기 충전 시작과 같은 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 전송합니다. 또한 앱은 맞춤 브로드캐스트를 전송하여 다른 앱이 관심을 가질만한 사항(예: 일부 새로운 데이터가 다운로드됨)을 관련 앱에 알릴 수 있습니다.

예제

아래 예제는 부팅이 완료되었을 때 브로드캐스트 수신을 하는 예제 입니다.

1. Manifest 파일에 등록

AndroidManifest.xml 파일에 설정

<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>는 리시버가 어떤 종류의 브로드캐스트 인텐트를 수신할지 지정합니다.

BroadCastReceiver 구현

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 내부에 구현하면 됩니다.

2. 컨텍스트에 등록

BoradcastReceiver 를 상속받은 클래스에 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()
                }
            }
        }
    }
    

컨텍스트에 등록

  1. BroadcastReceiver 인스턴스 생성
    val br: BroadcastReceiver = MyBroadcastReceiver()
  1. 수신자 등록

    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

profile
화이팅

0개의 댓글