예시 – 시스템 브로드캐스트 수신하기
1. 브로드캐스트(Broadcast) 기본 개념
1. 시스템 브로드캐스트란?
- Android에는 다수의시스템 레벨 브로드캐스트가 내장되어 있어 시스템 상태 변경을 알려줍니다.
- 자주 쓰이는 시스템 브로드캐스트:
- 배터리 부족 / 배터리 잔량 변화
- 부팅 완료(
BOOT_COMPLETED) - 네트워크 상태 변경(
CONNECTIVITY_CHANGE) - 비행기 모드 전환
- 시간/시간대 변경
2. 브로드캐스트 수신자의 역할
- 앱은 브로드캐스트 수신자를 등록하여 관심 있는 브로드캐스트를 감시합니다.
- 브로드캐스트가 도착하면 시스템이 자동으로 수신자의
onReceive()메서드를 호출합니다. onReceive()안에 비즈니스 로직을 작성합니다.
2. 브로드캐스트의 두 가지 등록 방식
| 비교 항목 | 동적 등록(코드 등록) | 정적 등록(Manifest 등록) |
|---|---|---|
| 등록 위치 | Activity / Service 등 컴포넌트 내부 | AndroidManifest.xml |
| 생명주기 | 등록한 컴포넌트에 종속 | 컴포넌트와 독립적이며 앱이 실행되지 않아도 수신 가능 |
| 유연성 | 높음, 언제든 등록/해제 가능 | 낮음, 앱 설치 시 확정 |
| 적용 시나리오 | 컴포넌트 생명주기를 인지해야 하는 브로드캐스트 | 전역 브로드캐스트, 부팅 실행 등 |
| 신버전 제한 | 특별 제한 없음 | Android 8.0 이상은 암시적 브로드캐스트에 많은 제한 |
중요:
CONNECTIVITY_CHANGE(네트워크 변경) 브로드캐스트는 Android 7.0 이상에서 정적 등록이 불가하며 동적 등록을 사용해야 합니다.
3. 브로드캐스트 수신자 생성
기본 단계
- 새 클래스를 만들고
BroadcastReceiver를 상속 onReceive(Context context, Intent intent)메서드를 오버라이드onReceive()내부에서 수신한 브로드캐스트 로직 처리
코드
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 브로드캐스트 로직 처리
}
}Code language: PHP (php)
4. 동적 등록 전체 흐름
1. 멤버 변수 정의
private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Code language: PHP (php)
2. onCreate()에서 등록
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceiver = new NetworkChangeReceiver();
intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChangeReceiver, intentFilter);
}Code language: JavaScript (javascript)
3. onDestroy()에서 등록 해제(필수!)
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}Code language: CSS (css)
4. 수신자 내부 클래스 정의
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "네트워크가 변경되었습니다", Toast.LENGTH_LONG).show();
}
}Code language: JavaScript (javascript)
Previous: Android 브로드캐스트 알아보기