Like this https://github.com/philipplackner/InternetConnectionObserver/tree/master
class AndroidConnectivityObserver(
private val context: Context
): ConnectivityObserver {
private val connectivityManager = context.getSystemService<ConnectivityManager>()!!
override val isConnected: Flow<Boolean>
get() = callbackFlow {
val callback = object : NetworkCallback() {
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
super.onCapabilitiesChanged(network, networkCapabilities)
val connected = networkCapabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_VALIDATED
)
trySend(connected)
}
override fun onUnavailable() {
super.onUnavailable()
trySend(false)
}
override fun onLost(network: Network) {
super.onLost(network)
trySend(false)
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
trySend(true)
}
}
connectivityManager.registerDefaultNetworkCallback(callback)
awaitClose {
connectivityManager.unregisterNetworkCallback(callback)
}
}
}
Like this https://github.com/philipplackner/InternetConnectionObserver/tree/master