예시 – 시스템 브로드캐스트 수신하기

예시 – 시스템 브로드캐스트 수신하기

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. 브로드캐스트 수신자 생성

기본 단계

  1. 새 클래스를 만들고 BroadcastReceiver를 상속
  2. onReceive(Context context, Intent intent) 메서드를 오버라이드
  3. 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)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다