개발바닥곰발바닥
728x90

방송 수신자

안드로이드 장치에서는 많은 이벤트들이 발생한다. 배터리가 부족할 수도 있고 네트워크가 끊어질 수도 있는 등의 이벤트들을 통지해주기 위해 방송 수신자(brodcast receiver)라는 메커니즘을 제공한다. 방송 수신자는 애플리케이션을 구성하는 4가지 컴포넌트 중 하나이다. 방송 수신자는 BroadcastReceiver 라는 클래스를 상속받아서 작성하면 된다.
이 때 onReceive()라는 메소드르르 재정의하게 되는데 방송이 수신되면 이 메소드가 호출되므로 여기에 필요한 코드를 넣으면 된다. onReceiver()의 매개변수인 context는 방송 수신자가 실행되는 컨텍스트이고 매개변수 intent를 통하여 방송에 대한 자세한 내용이 전달된다. intent의 액션에 방송의 종류가 들어 있고 intent의 필드에 추가 정보가 저장되어 있다.

방송 수신자도 액티비티처럼 애플리케이션을 구성하는 4가지 컴포넌트 중의 하나이므로 반드시 매니페스트 파일에 선언하여야 한다. 또 어떤 방송을 받을 것인지를 반드시 인텐트 필터를 통하여 지정하여야 한다.

액션 설명
ACTION_TIME_TICK 1분마다 보내진다.
ACTION_TIME_CHANGED 현재 시각 설정
ACTION_TIMEZONE_CHANGED 시간대 변경
ACTION_BOOT_COMPLETED 부트 완료
ACTION_PACKAGE_ADDED 패키지 추가
ACTION_PACKAGE_CHANGED 패키지 변경
ACTION_PACKAGE_REMOVED 패키지 삭제
ACTION_MEDIA_MOUNTED 외부 저장 장치 마운트 완료
ACTION_MEDIA_REMOVED 외부 저장 장치 제거
ACTION_BATTERY_CHANGED 배터리 상태 변경
ACTION_BATTERY_LOW 배터리 저충전
ACTION_POWER_CONNECTED 전원 연결
ACTION_POWER_DISCONNECTED 전원 연결 해제
ACTION_SHUTDOWN 파워 오프

방송 수신자의 동적 생성

방송 수신자는 일반적으로 매니페스트 파일에 태그를 사용하여서 정적으로 생성되는 것이 일반적이지만 경우에 따라서는 액티비티 안에서 동적으로 생성해서 사용하는 경우도 있다. 동적으로 생성하는 경우에는 객체 생성 후에 반드시 Context.registerReceiver()를 이용하여서 등록해야 한다. 액티비티의 onResume() 메소드에서 생성하고 onPause()에서 등록을 해제하면 액티비티가 화면에 보이는 동안에만 방송을 수신할 수 있어 시스템의 오버헤드를 줄일 수 있다. 그리고 ACTION_BATTERTY_CHANGED 등의 액션은 반드시 동적으로 등록해야만 수신할 수 있다.

최신 버전에서의 변경 사항

Android 8.0 (API 레벨 26)부터 대부분의 암시적 방송 수신자의 경우, 매니페스트 파일에 선언하여도 동작하지 않는다. 방송 수신자는 반드시 registerReceiver()를 사용하여 코드에서 등록하여야 한다.

728x90
profile

개발바닥곰발바닥

@bestinu

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!