This is how I managed to check if WIFI is available or not without using deprecated libraries and adding support for marshamallow devices-
@ExperimentalCoroutinesApi
suspend fun isWifiAvailable(): Boolean {
val connectivityManager =
ContextCompat.getSystemService(context, ConnectivityManager::class.java) ?: return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val networkCapabilities = connectivityManager.activeNetwork ?: return false
val activeNetwork =
connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
return activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
} else {
return connectivityManager.isNetworkAvailable(NetworkCapabilities.TRANSPORT_WIFI)
// val activeNetwork = connectivityManager.`activeNetworkInfo`
// return activeNetwork?.type == ConnectivityManager.TYPE_WIFI
}
}
@ExperimentalCoroutinesApi
private suspend fun ConnectivityManager.isNetworkAvailable(vararg transportType: Int): Boolean {
return suspendCancellableCoroutine { continuation ->
val builder = NetworkRequest.Builder()
transportType.forEach {
builder.addCapability(it)
}
val networkRequest = builder.build()
val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
continuation.resume(true, null)
unregisterNetworkCallback(this)
}
override fun onLost(network: Network) {
super.onLost(network)
continuation.resume(false, null)
unregisterNetworkCallback(this)
}
override fun onUnavailable() {
super.onUnavailable()
continuation.resume(false, null)
unregisterNetworkCallback(this)
}
}
registerNetworkCallback(networkRequest, networkCallback)
}
}