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

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 드림 연결 비용이 많이 드는지 판단합니다. 데이터 종량제 연결에서는 앱의 데이터 소비량을 줄이거나 기기에서 데이터 종량제 연결을 통해 전송합니다.

네트워크 콜백 구성

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