Skip to content

Instantly share code, notes, and snippets.

@luks91
Created April 29, 2018 19:41
Show Gist options
  • Save luks91/fa31be74b4ca2b341b703f25ee5d0924 to your computer and use it in GitHub Desktop.
Save luks91/fa31be74b4ca2b341b703f25ee5d0924 to your computer and use it in GitHub Desktop.
fun currentNetwork(context: Context,
scheduler: Scheduler = AndroidSchedulers.mainThread())
: Flowable<Network> {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return Flowable.create<Network>({ emitter ->
val worker = scheduler.createWorker()
val emit = { network: Network ->
worker.schedule { emitter.onNext(network) }
}
emit(Network.NONE)
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()
val networkCallback = object: ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: android.net.Network) {
emit(Network.CELLULAR)
}
override fun onLost(network: android.net.Network) {
emit(Network.NONE)
}
}
connectivityManager.requestNetwork(request, networkCallback)
emitter.setDisposable(CompositeDisposable(
worker,
CancellableDisposable {
connectivityManager.unregisterNetworkCallback(networkCallback)
}
))
}, BackpressureStrategy.LATEST)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment