Perfiles de Bluetooth

La API de Bluetooth admite el trabajo con perfiles de Bluetooth. Un perfil de Bluetooth es una especificación de interfaz inalámbrica para la comunicación entre dispositivos basada en Bluetooth, como el perfil de manos libres. Para que un dispositivo móvil se conecte a auriculares inalámbricos, ambos dispositivos deben admitir el perfil de manos libres.

La API de Bluetooth proporciona implementaciones para los siguientes perfiles de Bluetooth:

  • Auriculares. El perfil de auriculares ofrece compatibilidad con auriculares Bluetooth para usarlos con teléfonos móviles. Android proporciona la clase BluetoothHeadset, que es un proxy para controlar el servicio de auriculares Bluetooth. Esto incluye los perfiles de manos libres (v1.5) y de auriculares Bluetooth. La clase BluetoothHeadset incluye compatibilidad con comandos de AT. Para obtener más información sobre este tema, consulta Comandos de AT específicos del proveedor.
  • A2DP: El perfil de distribución de audio avanzada (A2DP) define cómo se puede transmitir audio de alta calidad de un dispositivo a otro a través de una conexión Bluetooth. Android proporciona la clase BluetoothA2dp, que es un proxy para controlar el servicio de A2DP Bluetooth.
  • Dispositivo de salud. Android admite el perfil de dispositivos de salud (HDP) Bluetooth. Esto te permite crear apps que usan Bluetooth para comunicarse con dispositivos de salud compatibles con Bluetooth, como monitores de frecuencia cardíaca, medidores de sangre, termómetros y balanzas, entre otros. Para obtener una lista de los dispositivos compatibles y sus códigos de especialización de los datos del dispositivo correspondientes, consulta Especializaciones de datos de dispositivos del HDP de Bluetooth. También se hace referencia a estos valores en la especificación ISO/IEEE 11073-20601 [7] como MDC_DEV_SPEC_PROFILE_* en el Anexo de códigos de nomenclatura. Para obtener más información sobre el HDP, consulta Perfil de dispositivos de salud.

A continuación, se detallan los pasos básicos para trabajar con un perfil:

  1. Obtén el adaptador predeterminado, como se describe en Configuración de Bluetooth.
  2. Configura un BluetoothProfile.ServiceListener. Este objeto de escucha notifica a los clientes de BluetoothProfile cuando se conectan al servicio o se desconectan de él.
  3. Usa getProfileProxy() para establecer una conexión con el objeto del proxy de perfil asociado al perfil. En el siguiente ejemplo, el objeto del proxy de perfil es una instancia de BluetoothHeadset.
  4. En onServiceConnected(), obtén un controlador para el objeto del proxy de perfil.
  5. Una vez que tengas el objeto del proxy de perfil, úsalo para supervisar el estado de la conexión y realizar otras operaciones relevantes para ese perfil.

En el siguiente fragmento de código, se muestra cómo conectarse a un objeto proxy BluetoothHeadset para controlar el perfil de auriculares:

Kotlin

var bluetoothHeadset: BluetoothHeadset? = null

// Get the default adapter
val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()

private val profileListener = object : BluetoothProfile.ServiceListener {

    override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = proxy as BluetoothHeadset
        }
    }

    override fun onServiceDisconnected(profile: Int) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = null
        }
    }
}

// Establish connection to the proxy.
bluetoothAdapter?.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET)

// ... call functions on bluetoothHeadset

// Close proxy connection after use.
bluetoothAdapter?.closeProfileProxy(BluetoothProfile.HEADSET, bluetoothHeadset)

Java

BluetoothHeadset bluetoothHeadset;

// Get the default adapter
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

private BluetoothProfile.ServiceListener profileListener = new BluetoothProfile.ServiceListener() {
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = (BluetoothHeadset) proxy;
        }
    }
    public void onServiceDisconnected(int profile) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = null;
        }
    }
};

// Establish connection to the proxy.
bluetoothAdapter.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET);

// ... call functions on bluetoothHeadset

// Close proxy connection after use.
bluetoothAdapter.closeProfileProxy(bluetoothHeadset);

Comandos de AT específicos del proveedor

Las apps pueden registrarse para recibir transmisiones del sistema de comandos de AT específicos del proveedor predefinidos que envían los auriculares (como un comando +XEVENT de Plantronics). Por ejemplo, una app podría recibir emisiones que indiquen el nivel de batería de un dispositivo conectado y notificar al usuario o realizar otras acciones según sea necesario. Crea un receptor de emisión para el intent ACTION_VENDOR_SPECIFIC_HEADSET_EVENT a fin de controlar los comandos de AT específicos del proveedor para los auriculares.

Perfil de dispositivos de salud

Android es compatible con el perfil de dispositivos de salud (HDP) Bluetooth. La API de Bluetooth Health incluye las clases BluetoothHealth, BluetoothHealthCallback y BluetoothHealthAppConfiguration, que se describen en Clases e interfaces clave.

Cuando se usa la API de Bluetooth Health, resulta útil comprender estos conceptos clave del HDP:

Fuente
Dispositivo de salud, como una báscula de peso, un glucosímetro o un termómetro, que transmite datos médicos a un dispositivo inteligente, como un teléfono o una tablet Android.
Receptor
El dispositivo inteligente que recibe los datos médicos. En una app del HDP, el receptor se representa con un objeto BluetoothHealthAppConfiguration.
Registro
Es el proceso que se usa para registrar un receptor a fin de comunicarse con un dispositivo de salud en particular.
Conexión
Es el proceso que se usa para abrir un canal entre un dispositivo de salud (fuente) y un dispositivo inteligente (receptor).

Crear una aplicación del HDP

Estos son los pasos básicos para crear una aplicación del HDP:

  1. Obtén una referencia al objeto de proxy BluetoothHealth. Al igual que con los dispositivos de perfil A2DP y auriculares normales, debes llamar a getProfileProxy() con un BluetoothProfile.ServiceListener y el tipo de perfil HEALTH para establecer una conexión con el objeto de proxy de perfil.

  2. Crea un BluetoothHealthCallback y registra una configuración de la app (BluetoothHealthAppConfiguration) que actúe como un receptor de estado.

  3. Establece una conexión con el dispositivo de salud.

  4. Cuando te conectes de forma correcta a un dispositivo de salud, lee y escribe en el dispositivo de salud con el descriptor de archivo. Los datos recibidos deben interpretarse mediante un administrador de salud, que implementa las especificaciones IEEE 11073.

  5. Cuando termines, cierra el canal de salud y cancela el registro de la app. El canal también se cierra cuando existe inactividad por tiempo prolongado.