¿Cómo comprobar la conexión a Internet en Kotlin?

Si se está desarrollando la aplicación de Android, que está basada en Internet, debe haber una función que verifique la conectividad a Internet e informe al usuario que no hay Internet disponible. Entonces, en este artículo, se ha demostrado paso a paso. Sobre cómo comprobar la conectividad a Internet. Eche un vistazo a la siguiente imagen que ofrece una descripción general de la discusión.

Implementación paso a paso

Paso 1: crear un proyecto de actividad vacío

Cree un proyecto de estudio de Android de actividad vacío. Consulte Cómo crear/iniciar un nuevo proyecto en Android Studio para saber cómo crear un proyecto de actividad vacío. Y seleccione Kotlin como lenguaje de programación.

Paso 2: trabajar con el archivo acitivity_main.xml

  • El diseño principal de la aplicación contiene solo un botón. El cual al hacer clic aparece un brindis que contiene el estado de la conectividad.
  • Para implementar la misma interfaz de usuario, invoque el siguiente código dentro del archivo acitivity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <Button
        android:id="@+id/buttonCheck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CHECK FOR CONNECTION"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
  
</androidx.constraintlayout.widget.ConstraintLayout>

Interfaz de usuario de salida:

Paso 3: trabajar con el archivo MainActivity.kt

  • El archivo MainActivity.kt contiene algunas API ya integradas que solían manejar la conectividad de la red.
  • Primero, debemos registrar la actividad con el servicio ConnectivityManager.
  • En segundo lugar, debemos verificar la versión de Android. si la versión es inferior a M, utiliza la API activeNetworkInfo, o si la versión es igual o superior a M, utiliza la API NetworkCapabilities.
  • Para implementar lo mismo, invoque el siguiente código dentro del archivo MainActivity.kt. Se agregan comentarios para una mejor comprensión.

Kotlin

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
  
class MainActivity : AppCompatActivity() {
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // register the UI element button
        val checkButton: Button = findViewById(R.id.buttonCheck)
  
        // handle the button click to trigger
        // checkForInternet function
        // and show the Toast message according to it.
        checkButton.setOnClickListener {
            if (checkForInternet(this)) {
                Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show()
            }
        }
    }
  
    private fun checkForInternet(context: Context): Boolean {
  
        // register activity with the connectivity manager service
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
  
        // if the android version is equal to M
        // or greater we need to use the
        // NetworkCapabilities to check what type of
        // network has the internet connection
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  
            // Returns a Network object corresponding to 
            // the currently active default data network.
            val network = connectivityManager.activeNetwork ?: return false
            
            // Representation of the capabilities of an active network.
            val activeNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false
  
            return when {
                // Indicates this network uses a Wi-Fi transport,
                // or WiFi has network connectivity
                activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                
                // Indicates this network uses a Cellular transport. or 
                // Cellular has network connectivity
                activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
  
                // else return false
                else -> false
            }
        } else {
            // if the android version is below M
            @Suppress("DEPRECATION") val networkInfo =
                connectivityManager.activeNetworkInfo ?: return false
            @Suppress("DEPRECATION")
            return networkInfo.isConnected
        }
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por adityamshidlyali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *