if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
val request: NetworkRequest = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()
connectivityManager.registerNetworkCallback(request, object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
Log.i("sdk", "Network available")
SDKRuntime.setNetworkAvailable(true)
}
override fun onLost(network: Network) {
super.onLost(network)
Log.i("sdk", "Network Lost")
SDKRuntime.setNetworkAvailable(false)
}
override fun onUnavailable() {
super.onUnavailable()
Log.i("sdk", "Network unavailable")
SDKRuntime.setNetworkAvailable(false)
}
})
} else {
val filter = IntentFilter()
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
registerReceiver(object : BroadcastReceiver(){
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
val networkActive = isNetworkActive(context)
Log.i("sdk", "Network status changed : $networkActive")
SDKRuntime.setNetworkAvailable(networkActive)
}
}
private fun isNetworkActive(context: Context): Boolean {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = cm.activeNetworkInfo
return networkInfo != null && networkInfo.isAvailable && networkInfo.isConnected
}
}, filter)
}