Android proporciona compatibilidad de plataforma integrada para Bluetooth de bajo consumo (BLE) en la función central y brinda APIs que las apps pueden usar para descubrir dispositivos, consultar servicios y transmitir información.
Los siguientes son algunos de los casos de uso típicos:
- Transferir volúmenes de datos reducidos entre dispositivos cercanos
- Cómo interactuar con los sensores de proximidad para brindar a los usuarios una experiencia personalizada en función de su ubicación actual
A diferencia del Bluetooth clásico, BLE está diseñado para un consumo de energía significativamente menor. Esto permite que las apps se comuniquen con dispositivos BLE que tienen requisitos de energía más estrictos, como sensores de proximidad, monitores de frecuencia cardíaca y dispositivos de entrenamiento.
Precaución: Cuando un usuario vincula su dispositivo con otro mediante BLE, todas las apps del dispositivo del usuario pueden acceder a los datos que se comunican entre ellos.
Por este motivo, si tu app captura datos sensibles, debes implementar seguridad de la capa de la app para proteger la privacidad de esos datos.
Conceptos básicos
Para que los dispositivos compatibles con BLE transmitan datos entre sí, primero deben formar un canal de comunicación. Para usar las APIs de Bluetooth LE, debes declarar varios permisos en tu archivo de manifiesto. Una vez que la app tenga permiso para usar Bluetooth, deberá acceder a BluetoothAdapter
y determinar si Bluetooth está disponible en el dispositivo. Si Bluetooth está disponible, el dispositivo buscará dispositivos BLE cercanos.
Una vez que se encuentra un dispositivo, las capacidades del dispositivo BLE se descubren a través de la conexión al servidor GATT del dispositivo BLE.
Una vez que se establece una conexión, se pueden transferir datos con el dispositivo conectado según los servicios y las características disponibles.
Términos y conceptos clave
El siguiente es un resumen de los términos y conceptos clave de BLE:
- Perfil de atributo genérico (GATT)
- El perfil GATT es una especificación general para enviar y recibir fragmentos cortos de datos conocidos como "atributos" a través de un vínculo BLE. Todos los perfiles de aplicación BLE actuales se basan en GATT. Para obtener más información, consulta el ejemplo de BluetoothLeGatt de Android en GitHub.
- Perfiles
- Bluetooth SIG define muchos perfiles para dispositivos BLE. Un perfil es una especificación sobre el funcionamiento de un dispositivo en una aplicación determinada. Ten en cuenta que un dispositivo puede implementar más de un perfil. Por ejemplo, un dispositivo podría contener un monitor de frecuencia cardíaca y un detector de nivel de batería.
- Protocolo de atributos (ATT)
- GATT se basa en el Protocolo de atributos (ATT). Esto también se conoce como GATT/ATT. ATT está optimizado para funcionar en dispositivos BLE. Para ello, utiliza la menor cantidad de bytes posible. Cada atributo se identifica de forma única mediante un identificador único universal (UUID), que es un formato estandarizado de 128 bits para un ID de string que se usa con el fin de identificar información de manera única. Los atributos transportados por ATT tienen el formato de características y servicios.
- Característica
- Una característica contiene un solo valor y 0-n descriptores que describen el valor de la característica. Una característica puede considerarse un tipo, análoga a una clase.
- Descriptor
- Los descriptores son atributos definidos que describen el valor de una característica. Por ejemplo, un descriptor puede especificar una descripción legible, un rango aceptable para el valor de una característica o una unidad de medida específica del valor de una característica.
- Servicio
- Un servicio es una colección de características. Por ejemplo, puedes tener un servicio llamado "monitor de frecuencia cardíaca" que incluya características como "medición de frecuencia cardíaca". Puedes encontrar una lista de los perfiles y servicios basados en GATT en Bluetooth.org.
Funciones y responsabilidades
Las siguientes funciones y responsabilidades se aplican cuando un dispositivo interactúa con un dispositivo BLE:
Central frente a periférico. Esto se aplica a la conexión BLE en sí misma. El dispositivo con la función central escanea en busca de anuncios y el dispositivo con la función periférica realiza el anuncio.
Servidor GATT o cliente GATT. Esto determina cómo se comunican los dos dispositivos una vez que establecen la conexión. Para comprender la distinción, imagina que tienes un teléfono Android y un dispositivo de seguimiento de actividad que es un dispositivo BLE. El teléfono admite la función central, mientras que el dispositivo de seguimiento de actividad admite la función periférica. Para establecer una conexión BLE, necesitas uno de cada uno. Dos elementos que solo admiten dispositivos periféricos no podrían comunicarse entre sí, ni dos elementos que solo admiten la central.
Una vez que el teléfono y el monitor de actividad establecen una conexión, comienzan a transferirse metadatos GATT entre sí. Según el tipo de datos que transfieran, cualquiera de los dos puede actuar como servidor. Por ejemplo, si el dispositivo de seguimiento de actividad desea informar datos del sensor al teléfono, tendría sentido que este funcionara como servidor. Si el dispositivo de seguimiento de actividad desea recibir actualizaciones del teléfono, tiene sentido que este actúe como servidor.
En el ejemplo que se usa en este tema, la app (que se ejecuta en un dispositivo Android) es el cliente GATT. La app obtiene datos del servidor GATT, que es un monitor de frecuencia cardíaca BLE compatible con el perfil de frecuencia cardíaca.
De forma alternativa, podrías diseñar tu app para que cumpla la función de servidor GATT. Consulta BluetoothGattServer
para obtener más información.