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
를 사용하여 연결이 비싼지 확인합니다. 종량제 연결 사용 시 앱의 데이터 사용을 줄이려고 하거나 기기가 데이터 전송량 제한이 없는 연결을 사용할 때까지 데이터 사용을 연기해야 합니다.
네트워크 콜백 구성
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) } }
자바
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);