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
를 사용하여 연결 비용이 많이 드는지 확인합니다. 종량제 연결 사용 시 앱의 데이터 사용을 줄이려고 하거나 기기에 데이터 전송량 제한이 없는 연결이 설정될 때까지 데이터 사용을 연기합니다.
네트워크 콜백 구성
NetworkRequest
를 ConnectivityManager
에 등록할 때는 연결 상태 및 네트워크 기능 변경에 관한 알림을 수신하기 위해 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); } };
네트워크 업데이트 등록
NetworkRequest
및 NetworkCallback
를 선언한 후 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);