Skip to content

Instantly share code, notes, and snippets.

@labibmuhajir
Last active September 1, 2021 04:18
Show Gist options
  • Save labibmuhajir/e98961bffc458429b5a3c14b379539b5 to your computer and use it in GitHub Desktop.
Save labibmuhajir/e98961bffc458429b5a3c14b379539b5 to your computer and use it in GitHub Desktop.
android network monitor
class NetworkMonitor(context: Context) : ConnectivityManager.NetworkCallback() {
private val weakContext = WeakReference(context)
private val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
.build()
fun listenNetwork() {
connectivityManager.registerNetworkCallback(networkRequest,this)
}
fun stopListen() {
connectivityManager.unregisterNetworkCallback(this)
}
override fun onLost(network: Network) {
super.onLost(network)
sendOfflineBroadcast()
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
sendOnlineBroadcast()
}
fun checkNetworkStatus() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectivityManager.activeNetwork?.let { network ->
connectivityManager.getNetworkCapabilities(network)?.let {
when {
it.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
it.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> sendOnlineBroadcast()
else -> sendOfflineBroadcast()
}
} ?: kotlin.run { sendOfflineBroadcast() }
} ?: kotlin.run {
sendOfflineBroadcast()
}
} else {
if (connectivityManager.activeNetworkInfo?.isConnected == true) sendOnlineBroadcast()
else sendOfflineBroadcast()
}
}
private fun sendOfflineBroadcast() {
weakContext.get()?.let {
sendBroadcast(it, Constant.OFFLINE)
}
}
private fun sendOnlineBroadcast() {
weakContext.get()?.let {
sendBroadcast(it, Constant.ONLINE)
}
}
private fun sendBroadcast(context: Context, networkStatus: String) {
LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(networkStatus))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment