본문 바로가기

CSE/Android

Android ConnectivityManager와 NetworkCallback

반응형

안드로이드 개발에서 네트워크 상태를 감지하고 관리하는 데는 ConnectivityManagerNetworkCallback을 사용할 수 있습니다 이들은 앱이 네트워크 연결 상태의 변화를 감지하고 적절하게 반응하는 데 필요한 도구입니다.

ConnectivityManager는 네트워크 연결(예: Wi-Fi, 4G 등)의 상태를 관리하는 역할을 합니다. 이를 통해 애플리케이션은 현재 네트워크의 상태를 확인하거나 네트워크 연결의 변경을 감지할 수 있습니다.

이런 네트워크 연결의 변경을 감지하려면 NetworkCallback을 사용해야 합니다. NetworkCallbackConnectivityManager가 제공하는 메서드 중 하나로, 네트워크 연결의 변경 상황을 알려주는 콜백입니다.

아래는 간단한 예제입니다.

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
        // 네트워크가 사용 가능해질 때 실행되는 코드
        Toast.makeText(context, "네트워크 연결됨", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLost(Network network) {
        // 네트워크 연결이 끊어졌을 때 실행되는 코드
        Toast.makeText(context, "네트워크 연결 끊김", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
        // 네트워크 능력이 변경될 때 실행되는 코드
        boolean valid = nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
        if (valid) {
            Toast.makeText(context, "유효한 네트워크 연결", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "유효하지 않은 네트워크 연결", Toast.LENGTH_SHORT).show();
        }
    }
};

NetworkRequest networkRequest = new NetworkRequest.Builder().build();
connectivityManager.registerNetworkCallback(networkRequest, networkCallback);

위의 코드는 NetworkCallback을 사용하여 네트워크의 연결 상태가 변경될 때 토스트 메시지를 통해 알려주는 예제입니다. 사용이 끝난 후에는 반드시 unregisterNetworkCallback()을 호출하여 콜백을 해제해야 합니다.
추가적으로 onCapabilitiesChanged는 네트워크에 어떤 변경점이 발생하면 호출되는 것으로 예시의 NET_CAPABILITY_VALIDATED 는 Network validation check 를 pass 하여 인터넷 사용이 가능한지 여부에 대한 것입니다.

다음 포스트는 DefaultNetworkCallback과 Listen 타입 Request 타입의 NetworkCallback에 대해 설명해보겠습니다

반응형