1.
브로드캐스트리시버(BroadCastReceiver)는 단말기 안에서 이루어지는 수많은 일들을 대신해서 알려준다.
ex) Android 시스템은 시스템 부팅, 기기 충전 시작과 같은 가양한 시스템 이벤트가 발생할 때 브로그캐스트를 전송하다.
ex) 배터리 부족, 전화가 오거나 하는 일들을 방송알림 해준다.
2.브로드캐스트 수신
앱은 두 가지 방식으로, 브로드캐스트를 수신할 수 있다.
첫번째 방법, manifest에 선언된 수신자에 등록된 수신자를 통해 브로드캐스트를 수신할 수 있습니다.
두번째 방법, 컨텍스트에 등록된 수신자를 통해 브로드캐스트를 수신할 수 있습니다.
3. 첫번째 방법, manifest에 선언된 수신자 - (이걸로 해봄)
manifest에 broadcast receiver를 선언하면 브로드캐스트가 전송될 때 앱이 아직 실행 중이 아니라면 시스템에서 앱을 실행한다!!!
- "첫번째 방법, manifest에 선언된 수신자" 여기서 부터 따라하면 됨 -
3.1. manifest에서 broadcast receiver를 선언
설명 -> 인텐트 필터(inten-filter)는 수신자가 구독할 브로드캐스트 작업을 지정합니다.
3.2.
BroadcastReceiver 서브클래스를 선언하고 onReceive(Context, Intent)를 구현합니다. 다음 예의 broadcast receiver는 브로드캐스트의 콘텐츠를 기록하고 표시합니다.
앱이 설치될 때 시스템 패키지 관리자가 수신자를 등록합니다. 그러면 수신자가 앱으로 향하는 별도의 진입점이 됩니다. 이는 앱이 현재 실행되고 있지 않으면 시스템이 앱을 시작하고 브로드캐스트를 전달할 수 있다는 의미입니다.
시스템은 수신하는 각 브로드캐스트를 처리하기 위해 새 BroadcastReceiver 구성요소 객체를 생성한다!!!
이 객체는 onReceive(Context, Intent) 호출이 지속되는 동안만 유효합니다.
코드가 이 메서드에서 반환되면 시스템은 구성요소가 더 이상 활성 상태가 아닌 것으로 간주한다.
4. 두번째 방법, 컨텍스트에 등록된 수신자 - (이걸로 안해봄)
- "두번째 방법, 수신자를 컨텍스트에 등록하려면" 여기서 부터 따라하면 됨 -
4.1. BroadcastReceiver 인스턴스를 생성한다.
BroadcastReceiver br = new MyBroadcastReceiver();
4.2. 다음과 같이 IntentFilter를 생성하고 registerReceiver(BroadcastReceiver, IntentFilter)를 호출하여 수신자를 등록한다.
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(br, filter);
컨텍스트에 등록된 수신자는 등록 컨텍스트가 유효한 동안 브로드캐스트를 수신한다.
예를 들어 Activity 컨텍스트 내에 등록하면 활동이 제거되지 않는 한 브로드캐스트를 수신한다.
Application 컨텍스트에 등록하면 앱이 실행되는 동안 브로드캐스트를 수신한다.
4.3.
브로드캐스트 수신을 중지하려면 unregisterReceiver(android.content.BroadcastReceiver)를 호출한다.
수신자가 더 이상 필요하지 않거나 컨텍스트가 더 이상 유효하지 않으면 수신자의 등록을 취소해야 한다.
수신자의 등록 및 등록 취소 위치에 유의해라!!!
예를 들어 활동의 컨텍스트를 사용하여 onCreate(Bundle)에 수신자를 등록했으면 활동 컨텍스트에서 수신자가 유출되지 않도록 onDestroy()에서 수신자를 등록 취소해야 한다.
onResume()에 수신자를 등록했으면 onPause()에서 수신자를 등록 취소하여 수신자가 여러 번 등록되지 않도록 해야 합니다(일시중지되었을 때 브로드캐스트를 수신하지 않으려면). 이렇게 하면 불필요한 시스템 오버헤드를 줄일 수 있습니다. 그리고 onSaveInstanceState(Bundle)에서 등록을 취소해서는 안 됩니다. 사용자가 기록 스택으로 되돌아가면 이 메서드가 호출되지 않기 때문입니다.
'■ Android > Tip' 카테고리의 다른 글
[Android] Activity, Context 가져오는 방법 (0) | 2020.01.06 |
---|---|
[Android] 브로드캐스트(BroadCast) - 2.전송, 3.권한을 사용하여 수신 (0) | 2020.01.04 |
[Android] Notification(노티피케이션), 알림 - (4)작업 버튼 추가 (0) | 2020.01.01 |
[Android] Notification(노티피케이션), 알림 - (3)확장형 알림 만들기 (0) | 2019.12.31 |
[Android] Notification(노티피케이션), 알림 - (2)기본사용법+설명 (0) | 2019.12.29 |