Biblioteca de Android NetworkStateObserver Una biblioteca que le ayuda a verificar el estado de su red, si está disponible, perdida o no disponible y también verificar la accesibilidad de su red cuando su servidor no funciona o su ISP está conectado pero no tiene suscripción de datos. Demostración: 1. Agregar NetworkStateObserver a su proyecto Incluya jitpack en su archivo raíz settings.gradle. pluginManagement { repositorios { … maven { url ‘https://jitpack.io’ } } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositorios { … maven { url ‘https://jitpack.io’ } } } Y agregue su dependencia al archivo build.gradle a nivel de aplicación: dependencias { implementación ‘com.github.RhymezxCode:NetworkStateObserver:1.1.3’ //Implementación de Livedata ‘androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0’ implementación ‘androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0’ implementación ‘androidx.lifecycle:lifecycle-runtime-ktx:2.7.0’ implementación ‘android.arch.lifecycle:extensions:1.1.1’ } Sincronización tu proyecto, y ???? auge???? ha agregado NetworkStateObserver con éxito. ❗ 2. Uso Primero inicialice la clase de constructor: val network = NetworkStateObserver.Builder() .activity(activity = this@NetworkStateObserverExample) .build() Si solo desea verificar la conectividad, antes de realizar una tarea o trabajo(): if (CheckConnectivity.isNetworkAvailable(requireContext())){ showToast( this@NetworkStateObserverExample, «Red restaurada») } Utilice el método de datos en vivo para determinar el estado de su red y reemplace el código en lifecycleScope.launchWhenStarted { ….your codifique aquí } para hacer lo que quiera: network.callNetworkConnection().observe(this) { isConnected -> lifecycleScope.launch(Dispatchers.IO) { if (isConnected) { cuando { Reachability.hasServerConnected( contexto = this@NetworkStateObserverExample, serverUrl = «https://www.your-server-url.com» ) -> lifecycleScope.launch{ showToast( «La URL del servidor funciona») } Reachability.hasInternetConnected( contexto = this@NetworkStateObserverExample ) -> lifecycleScope.launch{ showToast( «Red restaurada» ) } else -> lifecycleScope.launch{ showToast( «La red se perdió o hay problemas con el servidor») } } } else { //verificar si hay conexión perdida lifecycleScope.launch{ showToast( «Sin conexión de red») } } } } } Utilice el método de flujo para determinar el estado de su red y también vuelva a intentarlo cuando se produzca una excepción: lifecycleScope.launch { network.callNetworkConnectionFlow() .observe() .collect { when (it) { NetworkObserver.Status.Available -> { lifecycleScope.launch { cuando { Reachability.hasServerConnectedFlow( contexto = this@NetworkStateObserverExample, serverUrl = «https://www.github.com» ).retryWhen { causa, intento -> si (la causa es IOException && intento < 3) {
delay(2000)
return@retryWhen true
} else {
return@retryWhen false
}
}.buffer().first() -> lifecycleScope.launch { showToast( this@NetworkStateObserverExample, «La URL del servidor funciona») } Reachability.hasInternetConnectedFlow( contexto = this@NetworkStateObserverExample ).retryWhen { causa, intento -> si (la causa es IOException && intento < 3) {
delay(2000)
return@retryWhen true
} else {
return@retryWhen false
}
}.buffer().first() -> lifecycleScope.launch { showToast( this@NetworkStateObserverExample, «Red restaurada») } else -> lifecycleScope.launch { showToast( this@NetworkStateObserverExample, «La red se perdió o hay problemas con el servidor») } } } } NetworkObserver.Status.Unavailable -> { showToast( «¡La red no está disponible!» ) } NetworkObserver.Status.Losing -> { showToast( «¡Estás perdiendo tu red!» ) } NetworkObserver.Status.Lost -> { showToast( «¡La red está perdida!» ) } } } } Puede verificar si su conexión a Internet es estable solo si no tiene una URL de servidor: network.callNetworkConnection().observe(this) { isConnected -> lifecycleScope.launch(Dispatchers.IO) { if (isConnected) { cuando { Reachability.hasInternetConnected( contexto = this@NetworkStateObserverExample ) -> lifecycleScope.launchW{ showToast( «Red restaurada») } else -> lifecycleScope.launch{ showToast( «La red se pierde o hay problemas con el servidor») } } } else { //comprueba si hay conexión perdida lifecycleScope.launch{ showToast( «Sin conexión de red») } } } } } 3. También puedes inyectar NetworkStateObserver y usarlo en todas partes de tu aplicación con Hilt ???? : Cree un objeto para NetworkStateModule en su paquete di: @Module @InstallIn(ActivityComponent::class) object NetworkStateModule { @Provides fun provideNetworkStateObserver( actividad: Actividad ): NetworkStateObserver { return NetworkStateObserver.Builder() .actividad(actividad = actividad) .build() } } Declara la variable en tu clase como fragmento o actividad, funciona en ambos: @AndroidEntryPoint clase myFragment : Fragment(){ @Inject lateinit var network: NetworkStateObserver private fun callNetworkConnection() { network.callNetworkConnection() .observe(this) { isConnected -> lifecycleScope.launch(Dispatchers.IO) { if (isConnected) { cuando { Reachability.hasInternetConnected( contexto = this@NetworkStateObserverExample ) -> lifecycleScope.launch{ showToast( «Red restaurada») } else -> lifecycleScope.launch{ showToast( «La red se perdió o hay problemas con el servidor») } } } else { //verificar si hay conexión perdida lifecycleScope.launch{ showToast( «No hay conexión de red» ) } } } } } } anular diversión enResume () { super.onResume() callNetworkConnection() } } Agrega el método en onResume() de tu fragmento o actividad para tener una gran experiencia: override fun onResume() { super.onResume() callNetworkConnection() } ???? Por favor, no dudes en regalarme una estrella ????, también me encantan los destellos ✨ ☺️
Source link
Deja una respuesta