Android 네트워크 연결/끊김 브로드캐스트 감시

이것은 구 버전 Android API(Android 7 이하)의 구현 방식입니다. 브로드캐스트 리시버 + ConnectivityManager + NetworkInfo를 사용해 네트워크 연결과 끊김을 구분합니다.

1. 핵심 지식

  1. ConnectivityManager:네트워크 연결 상태를 관리하는 전용 시스템 서비스 클래스입니다.
  2. 권한:AndroidManifest.xml에 네트워크 상태 권한을 추가해야 합니다
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Code language: HTML, XML (xml)
  1. 원리:네트워크에 변화가 생기면 시스템이 네트워크 브로드캐스트를 보냅니다. BroadcastReceiver의 onReceive 콜백 안에서 ConnectivityManager로 현재 네트워크 정보를 가져와 연결 또는 끊김 여부를 판단합니다.

2. 전체 onReceive 코드

public void onReceive(Context context, Intent intent) {
    // 네트워크 관리 시스템 서비스 가져오기
    ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    // 현재 활성 네트워크 정보 가져오기(사용 중단된 API)
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null) {
        if (networkInfo.isAvailable()) {
            Toast.makeText(context, "네트워크 연결됨", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(context, "네트워크 끊김", Toast.LENGTH_LONG).show();
        }
    } else {
        // networkInfo가 null이면 네트워크 없음
        Toast.makeText(context, "네트워크 끊김", Toast.LENGTH_LONG).show();
    }
}
Code language: JavaScript (javascript)

3. 중요 안내(사용 중단 관련)

getActiveNetworkInfo(), NetworkInfo Android 10(API29)부터 사용이 중단되었습니다

신규 Android 버전에서는 ConnectivityManager.NetworkCallback 콜백 방식으로 네트워크를 감시하는 것을 권장하며, 구 브로드캐스트 + NetworkInfo 방식은 더 이상 권장하지 않습니다.

구 방식의 단점

  1. Android 8.0(API26) 이후로 정적 등록된 네트워크 상태 브로드캐스트가 제한됩니다. 정적 등록으로는 네트워크 변경 브로드캐스트를 수신할 수 없고 리시버를 동적으로 등록해야 합니다.
  2. NetworkInfo 클래스는 사용 중단되었으며, 신규 버전에서 직접 호출하면 경고가 발생하거나 동작하지 않을 수 있습니다.

4. 브로드캐스트 리시버 동적 등록

// 브로드캐스트 리시버 정의
public class NetReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 위 네트워크 판단 코드를 여기에 작성
    }
}
// Activity 안에서 동적 등록
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
NetReceiver receiver = new NetReceiver();
registerReceiver(receiver, filter);
Code language: PHP (php)

Android 네트워크 연결/끊김 브로드캐스트 감시

답글 남기기

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