📱 Android

[Android] NetworkInfo Deprecated

콩드로이드 2025. 6. 6. 12:31

과거 방식: NetworkInfo → 이제는 ❌

예전 사용법

val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = cm.activeNetworkInfo
val isConnected = networkInfo?.isConnectedOrConnecting == true

하지만 이 방식은 API 29(Android 10) 부터 deprecated 

  • 단순히 연결 유무만 알 수 있고, 인터넷 실제 연결 상태는 확인 불가
  • ex) Wi-Fi는 연결되었지만 인터넷이 안 터지는 경우에도 true로 찍힘,, 
  • Android의 Doze Mode, App Standby, VPN, 제한 네트워크 등 새로운 개념을 반영 못 함

→ 더 정확한 NetworkCapabilities 기반 방식으로 변경됨

 


 

 

NetworkCapabilities

실제로 인터넷 연결 가능한지 확인 

fun isNetworkAvailable(context: Context): Boolean {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val network = connectivityManager.activeNetwork ?: return false
    val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
    return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
}

 

  • activeNetwork → 현재 기기에서 실제로 연결되어 있는 네트워크를 의미함
  • hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)→ 그중에서도 "인터넷에 연결 가능한지" 여부를 확인하는 메서드
  • getNetworkCapabilities(network) → 해당 네트워크가 지원하는 기능들(인터넷 가능 여부, Wi-Fi인지 등)을 확인 가능 

 

 

네트워크 연결 변화 감지하는 방식 (callback 기반)

- 위에서의 기능은 함수를 실행하는 시점의 네트워크 연결 여부를 판단한다면,

이 callback은 네트워크 변화를 추적할 수 있음  !! 다만 콜백 해제에 유의해야함 ! 

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        Log.d("Network", "인터넷 사용가능")
    }

    override fun onLost(network: Network) {
        Log.d("Network", "인터넷 끊김")
    }
}

val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val request = NetworkRequest.Builder().build()
cm.registerNetworkCallback(request, callback)