Skip to content

Live Network Status

Monitor network connectivity changes in real-time using ConnectivityManager and NetworkCallback.

val networkManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
_networkStatus.value = true
}
override fun onLost(network: Network) {
super.onLost(network)
_networkStatus.value = false
}
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
super.onCapabilitiesChanged(network, networkCapabilities)
// Detect network speed, connection type when network is available
}
}

Note: onCapabilitiesChanged() detects network speed and connection type only when network is available, not when lost.

val networkRequest = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
.build()
networkManager.registerNetworkCallback(networkRequest, networkCallback)

Common options for NetworkCapabilities:

  • NET_CAPABILITY_INTERNET - Network is intended to provide internet access (works in local-only networks)
  • NET_CAPABILITY_VALIDATED - System successfully verified internet connectivity (e.g., pinged a server)
  • NET_CAPABILITY_NOT_RESTRICTED - Network is not restricted (excludes non-standard network environments)
  • TRANSPORT_WIFI - Monitor WiFi connections
  • TRANSPORT_CELLULAR - Monitor mobile data connections
  • TRANSPORT_ETHERNET - Monitor ethernet connections