Skip to content

Instantly share code, notes, and snippets.

@abircse
Created March 25, 2021 10:22
Show Gist options
  • Save abircse/c4a64440fdc558d5b15085d2be482514 to your computer and use it in GitHub Desktop.
Save abircse/c4a64440fdc558d5b15085d2be482514 to your computer and use it in GitHub Desktop.
NetworkConnectionCheckerlive
@file:Suppress("DEPRECATION")
import android.annotation.TargetApi
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.*
import android.os.Build
import androidx.lifecycle.LiveData
class NetworkConnection(private val context: Context): LiveData<Boolean>() {
private var connectivityManager: ConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private lateinit var networkCallback: ConnectivityManager.NetworkCallback
override fun onActive() {
super.onActive()
updateConnection()
when{
Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ->{
connectivityManager.registerDefaultNetworkCallback(connectivityManagerCallback())
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ->{
lollipopNetworkRequest()
}
else -> {
context.registerReceiver(networkReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
}
}
}
override fun onInactive() {
super.onInactive()
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
connectivityManager.unregisterNetworkCallback(connectivityManagerCallback())
}
else{
context.unregisterReceiver(networkReceiver)
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private fun lollipopNetworkRequest(){
val requestBuilder = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
connectivityManager.registerNetworkCallback(requestBuilder.build(),connectivityManagerCallback())
}
private fun connectivityManagerCallback(): ConnectivityManager.NetworkCallback{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
networkCallback = object : ConnectivityManager.NetworkCallback(){
override fun onLost(network: Network) {
super.onLost(network)
postValue(false)
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
postValue(true)
}
}
return networkCallback
}
else{
throw IllegalAccessError("Error")
}
}
private val networkReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
updateConnection()
}
}
private fun updateConnection() {
val activeNetwork: NetworkInfo? = connectivityManager.activeNetworkInfo
postValue(activeNetwork?.isConnected == true)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment