연결 상태 및 연결 측정 모니터링

ConnectivityManager는 기기 기능과 데이터 전송 옵션을 포함한 다양한 조건에 따라 기기를 네트워크에 연결하도록 요청할 수 있는 API를 제공합니다.

콜백 구현은 기기의 연결 상태와 현재 연결된 네트워크의 기능에 관한 정보를 앱에 제공합니다. API를 사용하면 기기가 현재 앱의 요구사항을 충족하는 네트워크에 연결되어 있는지 확인할 수 있습니다.

네트워크 요청 구성

Wi-Fi 또는 모바일 데이터 연결과 같은 네트워크의 전송 유형과 인터넷 연결과 같은 현재 연결된 네트워크의 기능을 지정하려면 네트워크 요청을 구성해야 합니다.

앱의 네트워크 연결 요구사항을 설명하는 NetworkRequest를 선언합니다. 다음 코드는 인터넷에 연결되어 있고 전송 유형에 Wi-Fi 또는 모바일 데이터 연결을 사용하는 네트워크에 관한 요청을 만듭니다.

Kotlin

val networkRequest = NetworkRequest.Builder()
        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        .build()

Java

NetworkRequest networkRequest = new NetworkRequest.Builder()
        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        .build();

일부 연결은 다른 연결보다 훨씬 더 많은 비용이 들 수 있습니다 (예: 모바일 연결은 일반적으로 비용이 높음). NetworkCapabilities#NET_CAPABILITY_NOT_METERED를 사용하여 연결 비용이 비싼지 확인합니다. 데이터 전송량 제한이 있는 연결을 사용할 때는 앱의 데이터 사용량을 줄이거나 기기가 무제한 연결 상태가 될 때까지 데이터 사용을 지연하세요.

네트워크 콜백 구성

ConnectivityManager를 사용하여 NetworkRequest를 등록할 때 연결 상태 및 네트워크 기능 변경에 관한 알림을 수신하도록 NetworkCallback를 구현해야 합니다.

NetworkCallback에서 가장 일반적으로 구현되는 함수에는 다음이 포함됩니다.

  • onAvailable()는 기기가 NetworkRequest에 지정된 기능 및 전송 유형 요구사항을 충족하는 새로운 네트워크에 연결되었음을 나타냅니다.
  • onLost()는 기기의 네트워크 연결이 끊어졌음을 나타냅니다.
  • onCapabilitiesChanged()는 네트워크 기능이 변경되었음을 나타냅니다. NetworkCapabilities 객체는 네트워크의 현재 기능에 관한 정보를 제공합니다.

Kotlin

private val networkCallback = object : ConnectivityManager.NetworkCallback() {
    // network is available for use
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
    }

    // Network capabilities have changed for the network
    override fun onCapabilitiesChanged(
            network: Network,
            networkCapabilities: NetworkCapabilities
    ) {
        super.onCapabilitiesChanged(network, networkCapabilities)
        val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
    }

    // lost network connection
    override fun onLost(network: Network) {
        super.onLost(network)
    }
}

Java

private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(@NonNull Network network) {
        super.onAvailable(network);
    }

    @Override
    public void onLost(@NonNull Network network) {
        super.onLost(network);
    }

    @Override
    public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
        super.onCapabilitiesChanged(network, networkCapabilities);
        final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
    }
};

네트워크 업데이트 등록

NetworkRequestNetworkCallback를 선언한 후 requestNetwork() 또는 registerNetworkCallback() 함수를 사용하여 NetworkRequest를 충족하는 기기에서 연결할 네트워크를 검색합니다. 그러면 상태가 NetworkCallback에 보고됩니다.

Kotlin

val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager
connectivityManager.requestNetwork(networkRequest, networkCallback)

Java

ConnectivityManager connectivityManager =
        (ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);