Skip to content

Instantly share code, notes, and snippets.

@ekoo
Created May 23, 2020 13:30
Show Gist options
  • Save ekoo/5e7ee2eba9566726bb794cc9e07906a2 to your computer and use it in GitHub Desktop.
Save ekoo/5e7ee2eba9566726bb794cc9e07906a2 to your computer and use it in GitHub Desktop.
class NetworkInfo {
@Suppress("DEPRECATION")
@ExperimentalCoroutinesApi
fun checkConnection(context: Context) = callbackFlow{
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build()
val networkCallback = object : ConnectivityManager.NetworkCallback(){
override fun onAvailable(network: Network) {
offer(true)
}
override fun onUnavailable() {
offer(false)
}
override fun onLost(network: Network) {
offer(false)
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
connectivityManager.requestNetwork(networkRequest, networkCallback, 2000)
} else{
connectivityManager.activeNetworkInfo ?: offer(false)
connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
}
awaitClose { connectivityManager.unregisterNetworkCallback(networkCallback) }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment