[안드로이드] BroadcastReceiver 간단하게, 제대로 알자! with Kotlin

2021. 3. 22. 18:01개발/[Kotlin] 안드로이드 개발

반응형

안녕하세요.

회사에서 앱을 만들다가 자정이 되면 해야할 이벤트가 있어서 어떻게 구현해야 할까 하다가 BroadcastReceiver에 대해 공부한 후에 

정리합니다. 

BroadcastReceiver란?

안드로이드에서 전화가 오거나, 문자가 오거나 그런 상황들을 캐치해서 방송을 해주는 아주 중요한 안드로이드 4대 컴포넌트 중 하나이다.

종류는?

developer.android.com/reference/android/content/Intent#ACTION_DATE_CHANGED

 

Intent  |  Android 개발자  |  Android Developers

 

developer.android.com

진짜 너무너무 많으니 필요할 때 찾아쓰는걸로 ..ㅎㅎ

구현은?

안드로이드 8.0부터는 정적 리시버를 사용할 수 없게 되었다.

정적 리시버가 아닌 동적 리시버로 구현해야한다.

Manifests

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

BroadcastReceiver

간단하게 하루가지나면 00시가 되면 나타나는 receiver를 구현해보겠다.

먼저 BroadcastReceiver를 상속받는 클래스를 하나 만든다.

BroadcastReceiver를 상속받으면 override된 onReceive메소드가 계속 이벤트를 observe하다가 intent.action과 같아지면 이벤트를 발생시킨다. 

class BroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        if(Intent.ACTION_DATE_CHANGED == intent!!.action) {
          DoSomeThing()!
        }
    }
}

MainActivity

인텐트 필터 추가는 어떻게? 메인액티비티의 onresume과 onpause에서 추가해주고 등록해주고 삭제해준다.

    // 브로드캐스트리시버 필터 추가 & 등록
    override fun onResume() {
        super.onResume()
        var filter = IntentFilter()
        filter.addAction(Intent.ACTION_DATE_CHANGED)
        registerReceiver(mReceiver, filter)
    }

    // 등록 삭제
    override fun onPause() {
        super.onPause()
        unregisterReceiver(mReceiver)
    }

그럼 이제 DoSomething()부분에다가 Toast.makeText(context!!, "날이 바뀌었다.",  Toast.LENGTH_SHORT).show()를 추가하고 핸드폰 시간을 11시 59분으로 바뀌고 1분 기다려보자.

토스트 메시지가 발생하는 것을 확인할 수 있고 필요한 이벤트를 실행할 수 있다 !

 

반응형