[Android/Kotlin] Broadcast Receiver, 시간 변화에 따른 Time Change Event. Time Tick Action.
안녕하세요 골드입니다.
오늘은 안드로이드의 Broadcast Receiver를 사용하여 시간 변화에 따른 Listener 이벤트를 발생시키는 예제를 만들어 보도록 하겠습니다. 안드로이드는 앱 혹은 시스템에서 특정 이벤트 발생에 대한 브로드캐스트 메시지를 주고 받을 수 있습니다. 어떤 이벤트에 대한 브로드캐스트 메시지를 주고 받음으로써 이벤트를 수신할 수 있습니다. 자세한 설명은 공식 홈페이지를 참고하세요.
https://developer.android.com/guide/components/broadcasts?hl=ko
1. Broadcast Receiver Action
특정 이벤트 브로드캐스트 메시지 수신은 해당 이벤트를 식별하는 Intent 객체를 통해서 가능합니다. 특정 이벤트를 ACTION이라고 칭하는데요. 이 특정 이벤트는 상수로써 Intent 객체 안에 랩핑되어 있습니다. 필요한 이벤트를 수신하기 위해 IntentFilter객체를 생성해서 필요한 이벤트의 상수를 등록하면 되는 것입니다.
쉽게 말해서 특정 이벤트 Action을 랩핑한 Intent객체를 생성한다는 뜻입니다. Intent는 액티비티를 시작하는 일과 더불어 브로드캐스트 메시지를 전달하는 역할을 담당하고 있습니다. 여기서 ACTION_TIME_TICK은 시간의 변화를 감지하는 Action입니다. 앱 안에서 Scope나 Async를 통해 delay()를 주지 않고, 1분 단위로 브로드캐스트 메시지를 수신하도록 하는 Action입니다.
2. Broadcast Receiver 생성
이제 특정 이벤트는 선언하였고, 브로드캐스트 객체를 생성하여 어떤 이벤트를 수신할 것인지 알려줘야 합니다. 클래스 내에서 여러번 호출하지 않을 것이므로, object로 생성하겠습니다. object로 선언하였기 때문에 Class member를 반드시 Implement해야 합니다. onReceive를 Implement하도록 하겠습니다.
전체 구조는 모두 구현하였습니다. 이제 onReceive() 안에 Log나 Timber를 찍어서 잘 동작하는지 확인한 후 코드를 작성하여 적절하게 사용하면 됩니다. 중요한 것은 특정 이벤트에 대한 intent를 생성하였고, BroadcastReceiver 또한 생성한 후 registerReceiver()를 통해 브로드캐스트를 등록해줘야 작동한다는 점입니다. 사실 잊어버리기도 어렵기 때문에 크게 문제될 것 같지는 않습니다.
여기까지 골드였습니다.
감사합니다.