ConnectivityManager
는
이 API를 사용하면 애플리케이션이
기기 기능과 데이터 전송 옵션을 포함하는 다양한 조건을 충족해야 합니다.
콜백 구현은 기기에 다음과 같은 정보를 제공합니다. 현재 연결된 클러스터의 기능을 네트워크에 속합니다. API를 사용하면 기기가 현재 사용 중인지 확인할 수 네트워크에 연결되어 있어야 합니다.
네트워크 요청 구성
Wi-Fi 또는 셀룰러와 같은 네트워크의 전송 유형을 지정합니다. 인터넷과 같은 현재 연결된 네트워크의 기능이 네트워크 요청을 구성해야 합니다.
다음과 같은 NetworkRequest
를 선언합니다.
앱의 네트워크 연결 요구사항을 설명합니다. 다음 코드는
인터넷에 연결되어 있고 Wi-Fi 또는 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);