Broadcast Recevier는 안드로이드 컴포넌트중 하나로 이벤트를 수신하는 역할을 한다.

여기서 말하는 이벤트란 액티비티를 다루며 발생하는 이벤트가 아닌 시스템의 특정한 상황을 의미한다.
예를 들어 스마트폰에서 전원 충전, 전원 충전 해제, 비행기 모드 돌입, 애플리케이션 설치 완료 등의 다양한 시스템 이벤트들이 있다.
또한 Broadcast Recevier를 이용해 다른 앱이 송신하는 방송에 대한 처리가 가능하다.
ex) 배터리가 10% 이하가 되면 절전모드 실행
간단히 말해서 어떤 이벤트를 구독하고, 그 이벤트가 발생할 때마다 구독자들에게 알리는 옵저버 패턴이라고 할 수 있다.
여기서 '알림'은 Broadcast, '구독자'는 BroadcastReceiver가 된다.
안드로이드에서 사용되는 Broadcast의 종류는 다음과 같다.
- 부팅이 끝났을 때 (RECEIVE_BOOT_COMPLETED 권한 등록 필요)
ACTION_BOOT_COMPLETED
ACTION_CAMERA_BUTTON
- 카메라 버튼이 눌렸을 때
ACTION_DATE_CHANGED
ACTION_TIME_CHANGED
- 폰의 날짜, 시간이 수동으로 변했을 때 (설정에서 수정했을 때)
ACTION_SCREEN_OFF
ACTION_SCREEN_ON
- 화면 on, off
ACTION_AIRPLANE_MODE_CHANGED
- 비행기 모드
ACTION_BATTERY_CHANGED
ACTION_BATTERY_LOW
ACTION_BATTERY_OKAY
- 배터리 상태변화
ACTION_PACKAGE_ADDED
ACTION_PACKAGE_CHANGED
ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_INSTALL
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_REPLACED
ACTION_PACKAGE_RESTARTED
- 어플 설치/제거
ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
- 충전 관련
ACTION_REBOOT
ACTION_SHUTDOWN
- 재부팅/종료
ACTION_TIME_TICK
- sms 수신 (RECEIVE_SMS 권한 필요)
android.provider.Telephony.SMS_RECEIVED
class Receiver: BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
TODO("Not yet implemented")
}
}
BroadcastReceiver는 BroadcastReceiver를 상속받는 클래스를 선언하고 onReceive 함수를 오버라이드 받아 만들 수 있다.
BroadcastReceiver의 생명주기는 onReceive 하나이다.
BroadcastReceiver를 실행하려고 intent를 시작하면 onReceive 함수가 자동으로 호출된다.
onReceive 함수는 자신을 호출한 intent 객체를 매개변수로 전달받는다.
BroadcastReceiver 역시 컴포넌트이기 때문에 Manifest 파일에 등록을 해주어야한다.
<receiver
android:name=".Receiver"
android:enabled="true"
android:exported="true"/>