NetworkMonitor
This commit is contained in:
@@ -13,6 +13,8 @@ import kotlinx.coroutines.Dispatchers
|
|||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import java.net.HttpURLConnection
|
||||||
|
import java.net.URL
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@@ -33,13 +35,16 @@ class NetworkMonitor @Inject constructor(
|
|||||||
override fun onAvailable(network: Network) {
|
override fun onAvailable(network: Network) {
|
||||||
performPingCheck()
|
performPingCheck()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLost(network: Network) {
|
override fun onLost(network: Network) {
|
||||||
_isConnected.postValue(false)
|
_isConnected.postValue(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun startMonitoring() {
|
fun startMonitoring() {
|
||||||
|
val network = connectivityManager.activeNetwork
|
||||||
|
if (network != null) {
|
||||||
|
performPingCheck()
|
||||||
|
}
|
||||||
val networkRequest = NetworkRequest.Builder()
|
val networkRequest = NetworkRequest.Builder()
|
||||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
|
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
|
||||||
.build()
|
.build()
|
||||||
@@ -58,10 +63,13 @@ class NetworkMonitor @Inject constructor(
|
|||||||
private fun performPingCheck() {
|
private fun performPingCheck() {
|
||||||
networkScope.launch {
|
networkScope.launch {
|
||||||
try {
|
try {
|
||||||
// Ping Google's public DNS server
|
val url = URL("https://www.google.com")
|
||||||
val process = Runtime.getRuntime().exec("/system/bin/ping -c 1 8.8.8.8")
|
val connection = url.openConnection() as HttpURLConnection
|
||||||
val isReachable = process.waitFor() == 0
|
connection.connectTimeout = 2000
|
||||||
|
connection.connect()
|
||||||
|
val isReachable = connection.responseCode == 200
|
||||||
_isConnected.postValue(isReachable)
|
_isConnected.postValue(isReachable)
|
||||||
|
connection.disconnect()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
_isConnected.postValue(false)
|
_isConnected.postValue(false)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user