Saltar la navegación

4.1. Tipos de conexiones

Los terminales móviles tienen una gran habilidad para conectarse con otros dispositivos, ya sea mediante llamadas de voz, de VoIP, Bluetooth, USB, internet mediante datos del operador o wifi, además de VPN; algunos incluso disponen de comunicación infrarroja IR, o NFC.

Comentemos brevemente algunos de estos tipos de conexiones:

  • Telecom: el framework Telecom de Android administra las llamadas y videollamadas. Eso incluye las llamadas clásicas mediante el framework Telephony y las llamadas VoIP mediante la API ConnectionService.
  • Internet: Ya sea mediante datos del operador de telecomunicaciones o mediante conexión a una red wifi a la que tenga acceso, el dispositivo móvil podrá acceder a internet. Podríamos utilizar la siguiente función para comprobar si disponemos de conexión; de no tener, podríamos pedir al usuario que la activase. Se utilizan los métodos del servicio ConnectivityManager para comprobar qué tipos de conexiones están disponibles.
  • Bluetooth: las conexiones BT se utilizan en miles de aplicaciones. Podemos usar Bluetooth para enviar sonido desde una app hasta nuestros auriculares, o para obtener los datos de nuestra pulsera de ejercicio. Se podrían distinguir dos tipos de conexión Bluetooth: la Classic y la Low Energy o LE. Esta última es la más usada debido a la cantidad de pequeños dispositivos conectables con nuestro smartphone, que sólo necesitan una cantidad limitada de datos para comunicarse. El Low Energy va montado sobre las funcionalidades del Classic, pero, una vez establecida la conexión, la transmisión de datos es más eficiente energéticamente. Android dispone de las clases necesarias para escanear el entorno en busca de dispositivos BT, parearse con ellos, conectarse y comenzar el intercambio de datos. Para ello, dispondremos de clases como BluetoothAdapter y BluetoothDevice, localizadas en el paquete android.bluetooth.
  • NFC: Near Field Communication es un conjunto de tecnologías wireless de rango muy corto (alrededor de cuatro centímetros). Sin embargo, a diferencia del Bluetooth, es una comunicación más sencilla y rápida al no necesitar descubrimiento de dispositivos ni emparejamiento alguno. NFC permite compartir datos entre una etiqueta NFC y un móvil con antena NFC, o entre dos móviles de este tipo, o entre el móvil y un sistema de pago, etcétera.

UWB

Android prepara el soporte oficial para UWB, la conectividad de banda ultra ancha que aspira a reemplazar al Bluetooth. Puedes ver la noticia aquí y su apartado en el manual de Android, aquí.

Ejemplo

La siguiente función devuelve si existe una conexión a Internet activa o no:

private fun checkForInternet(context: Context): Boolean {

        // registra la actividad mediante el Servicio de control de conectividad
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        // Devuelve un objeto de tipo Network correspondiente a la conexión actual o FALSE
        val network = connectivityManager.activeNetwork ?: return false

        // Devuelve las capacidades de la conexión activa
        val activeNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false

        return when {
            // Indica si la red usa un transporte WIFI,
            // o si WiFi tiene conectividad
            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true

            // Indica si la red usa un transporte de red móvil,
            // o si la red móvil tiene conectividad
            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true

            // si no, devuelve false
            else -> false
        }
    }

Si realizamos una llamada (por listener, cambios de estado, etc.), podemos gestionar su retorno para realizar alguna acción al respecto. Por ejemplo, hacer una transferencia de información si existe conexión, avisar al usuario si no existiera, etc...

checkButton.setOnClickListener() {
            if (checkForInternet(this)) {
                Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show()
            }
        }