-
[Android/Java] 브로드캐스트 수신자(Broadcast Receiver)Android/Java 2021. 12. 15. 15:39반응형
[모든 포스팅은 개인적 공부를 위해 작성된 글입니다]
<수신자>
- 앱 간 또는 구성 요소 간 메시지를 주고 받을 수 있도록 한 것- 화면이 없는 상태에서 Intent 안에 포함된 메시지 주고받을 때 사용
<브로드캐스팅(Broadcasting)>
- 메시지를 여러 객체(여러 앱 구성 요소)에 전달하는 것
<글로벌 이벤트(Global Event)>
- 단말 전체에 메시지가 전달되는 것
<브로드캐스트 수신자(Broadcast Receiver)>
- 브로드캐스딩 메시지 받고 싶은 경우 사용((ex)앱 A에서 앱 B로 메시지 전달)
- 서비스와 마찬가지로 앱의 구성 요소이므로 Manifest 파일에 등록해야 시스템이 알 수 있고 화면도 없게 됨
- Manifest가 아닌 소스 코드에서 registerReceiver() 메서드 사용해 시스템에 등록할 수 있는데, 이 경우 액티비티 안에서 브로드캐스트 메시지 전달받아 바로 다른 작업 수행하도록 할 수 있는 장점이 있음
- 얻을 수 있는 이벤트
- 배터리 부족, 네트워크 연결/끊김, SD카드 삽입/제거, SMS 수신, 카메라 버튼 눌림, 휴대폰의 날짜*시간 변동, 비행기모드 전환, 어플 설치/제거, 재부팅/종료 등등..
*참고*
- 오레오 이전 버전은 앱이 꺼져도 정상적으로 브로드캐스트 수행
- 오래오 이상의 버전은 앱이 꺼지면 리소스 소모 등의 이유로 기능이 제한됨
<브로드캐스트 등록 및 사용(예제는 SMS 메시지 수신)>
[app -> New -> Other -> Broadcast Recevier]
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } }
- onReceive() 메서드는 원하는 브로드캐스트 메시지가 도착하면 자동으로 호출됨(예제에서는 SMS 메시지가 들어간 Intent 수신한 경우 onReceive() 메서드가 호출됨)
- 원하는 메시지만 받으려면 Intent-filter 사용해 시스템에 등록하면 됨
- Manifest에 등록된 receiver에 intent-filter 추가
<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
- android.provider.Telephony.SMS_RECEIVED는 SMS 메시지가 들어간 Intent 구분하기 위한 액션 정보
...계속 추가 예정
반응형'Android > Java' 카테고리의 다른 글
[Android/Java] 알림(Notification) (0) 2021.12.19 [Android/Java] 애플리케이션 기본 항목 (0) 2021.12.16 [Android/Java] 메모 (0) 2021.12.15 [Android/Java] 서비스 (0) 2021.12.14 [Android/Java] 푸시 서비스 (0) 2021.12.11