Skip to content

Instantly share code, notes, and snippets.

@robertlevonyan
Created December 18, 2019 12:44
Show Gist options
  • Save robertlevonyan/2a1931a5f9f45a6079bcd120957a2f2e to your computer and use it in GitHub Desktop.
Save robertlevonyan/2a1931a5f9f45a6079bcd120957a2f2e to your computer and use it in GitHub Desktop.
Network Listener Flow
@ExperimentalCoroutinesApi
fun notifyNetwork() = channelFlow<Boolean> {
val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()
val connectivityManager: ConnectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.registerNetworkCallback(networkRequest, object : ConnectivityManager.NetworkCallback() {
override fun onLost(network: Network) {
super.onLost(network)
launch {
channel.offer(false)
}
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
launch {
channel.offer(true)
}
}
})
awaitClose {
println("Network closed")
}
}
fun main() {
CoroutineScope(Dispatchers.Main).launch {
notifyNetwork().collect {
println(if (it) "Network connected" else "No Internet")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment