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

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()

자바

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

일부 연결은 다른 연결보다 훨씬 더 비쌀 수 있습니다 (예: 모바일 연결은 일반적으로 비쌈). NetworkCapabilities#NET_CAPABILITY_NOT_METERED를 사용하여 연결이 비싼지 확인합니다. 종량제 연결 사용 시 앱의 데이터 사용을 줄이려고 하거나 기기가 데이터 전송량 제한이 없는 연결을 사용할 때까지 데이터 사용을 연기해야 합니다.

네트워크 콜백 구성

ConnectivityManagerNetworkRequest를 등록할 때는 연결 상태와 네트워크 기능의 변경사항에 관한 알림을 수신하도록 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)
    }
}

자바

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);