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

ConnectivityManager를 사용하여 인터넷에 연결되어 있는지 확인하고 연결되어 있다면 어떤 유형의 연결이 설정되어 있는지 확인할 수 있습니다.

인터넷에 연결되어 있는지 확인

인터넷에 연결되어 있지 않으면 인터넷 리소스를 기반으로 업데이트를 실행할 수 없습니다. 인터넷 연결이 필요한 작업을 예약하기 위해 권장되는 방법은 WorkManager를 사용하는 것입니다. 자세한 내용은 WorkManager로 작업 예약을 참조하세요. 또한 다음 스니펫에 나와 있는 메서드를 사용해 활성 네트워크를 대화식으로 쿼리하여 인터넷에 연결되어 있는지 확인할 수도 있습니다.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
    

자바

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();
    

참고: getActiveNetworkInfo()는 Android 10에서 지원 중단되었습니다. Android 10(API 수준 29) 이상을 타겟팅하는 앱에는 NetworkCallbacks를 대신 사용하세요.

인터넷 연결 유형 확인

현재 사용 가능한 인터넷 연결 유형을 확인할 수도 있습니다.

기기 연결은 모바일 데이터, WiMAX, Wi-Fi 및 이더넷 연결로 제공될 수 있습니다. 다음 코드 샘플과 같이 활성 네트워크 유형을 쿼리하여 사용 가능한 대역폭에 따라 앱의 동작을 변경할 수 있습니다.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val isMetered = cm.isActiveNetworkMetered()
    

자바

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isMetered = cm.isActiveNetworkMetered();
    

참고: 앱이 Android 4.0(API 수준 15) 이하를 지원해야 하면 ConnectivityManager.isActiveNetworkMetered() 대신 ConnectivityManagerCompat.isActiveNetworkMetered를 사용하세요.

모바일 데이터 비용은 Wi-Fi 및 이더넷 비용보다 상당히 높은 경향이 있습니다. 종량제 연결 사용 시 앱의 데이터 사용을 줄이려고 하거나 데이터 전송량 제한이 없는 연결을 사용할 때까지 데이터 사용을 연기해야 합니다.