이것은 구 버전 Android API(Android 7 이하)의 구현 방식입니다. 브로드캐스트 리시버 +
ConnectivityManager+NetworkInfo를 사용해 네트워크 연결과 끊김을 구분합니다.
1. 핵심 지식
- ConnectivityManager:네트워크 연결 상태를 관리하는 전용 시스템 서비스 클래스입니다.
- 권한:
AndroidManifest.xml에 네트워크 상태 권한을 추가해야 합니다
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Code language: HTML, XML (xml)
- 원리:네트워크에 변화가 생기면 시스템이 네트워크 브로드캐스트를 보냅니다.
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 방식은 더 이상 권장하지 않습니다.
구 방식의 단점
- Android 8.0(API26) 이후로 정적 등록된 네트워크 상태 브로드캐스트가 제한됩니다. 정적 등록으로는 네트워크 변경 브로드캐스트를 수신할 수 없고 리시버를 동적으로 등록해야 합니다.
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 네트워크 연결/끊김 브로드캐스트 감시
Previous: 예시 – 시스템 브로드캐스트 수신하기
Next: 정적 등록 방식을 이용한 부팅 알림 구현