Skip to content

Instantly share code, notes, and snippets.

@Skyyo
Created August 10, 2020 17:45
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Skyyo/07e4a2f072d41fd6337ddf2404b5c8cd to your computer and use it in GitHub Desktop.
Save Skyyo/07e4a2f072d41fd6337ddf2404b5c8cd to your computer and use it in GitHub Desktop.
Tracker for internet connection updates. #network_connection
object NetworkUtils : ConnectivityManager.NetworkCallback() {
private val networkLiveData: MutableLiveData<Boolean> = MutableLiveData()
override fun onAvailable(network: Network) {
networkLiveData.postValue(true)
}
override fun onLost(network: Network) {
networkLiveData.postValue(false)
}
fun getNetworkLiveData(context: Context): LiveData<Boolean> {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
connectivityManager.registerDefaultNetworkCallback(this)
} else {
val builder = NetworkRequest.Builder()
connectivityManager.registerNetworkCallback(builder.build(), this)
}
var isConnected = false
// Retrieve current status of connectivity for the first observer
connectivityManager.allNetworks.forEach { network ->
val networkCapability = connectivityManager.getNetworkCapabilities(network)
networkCapability?.let {
if (it.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
isConnected = true
return@forEach
}
}
}
networkLiveData.postValue(isConnected)
return networkLiveData
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment