Perfis Bluetooth

A API Bluetooth é compatível com perfis Bluetooth. Um perfil Bluetooth é uma especificação de interface sem fio para comunicação por Bluetooth entre dispositivos, como o perfil Hands-Free. Para que um dispositivo móvel se conecte a um fone de ouvido sem fio, os dois dispositivos precisam oferecer suporte ao perfil viva-voz.

A API Bluetooth oferece implementações para os seguintes perfis Bluetooth:

  • Fone de ouvido. O perfil Headset oferece suporte para fones de ouvido Bluetooth serem usados com smartphones. O Android oferece a classe BluetoothHeadset, que é um proxy para controlar o Bluetooth Headset Service. Isso inclui os perfis Bluetooth Headset e Hands-Free (v1.5). A classe BluetoothHeadset inclui suporte para comandos AT. Para saber mais sobre esse tópico, consulte Comandos AT específicos do fornecedor.
  • A2DP: O perfil Advanced Audio Distribution Profile (A2DP) define como fazer streaming de áudio de alta qualidade de um dispositivo para outro por uma conexão Bluetooth. O Android oferece a classe BluetoothA2dp, que é um proxy para controlar o serviço Bluetooth A2DP.
  • Dispositivo de saúde. O Android oferece suporte ao Perfil de dispositivo Saúde (HDP) Bluetooth. Esse recurso permite criar apps que usam o Bluetooth para comunicação com dispositivos de saúde compatíveis com Bluetooth, como monitores de frequência cardíaca, medidores de sangue, termômetros, balanças etc. Para conferir uma lista de dispositivos com suporte e os códigos de especialização de dados correspondentes, consulte Especializações de dados do dispositivo HDP do Bluetooth. Esses valores também são referenciados na especificação ISO/IEEE 11073-20601 [7] como MDC_DEV_SPEC_PROFILE_* no Anexo de Códigos de Nomenclatura. Para mais informações sobre o HDP, consulte Perfil Health Device.

Veja a seguir as etapas básicas para trabalhar com um perfil:

  1. Use o adaptador padrão, conforme descrito em Configuração do Bluetooth.
  2. Configure um BluetoothProfile.ServiceListener. Ele notifica os clientes BluetoothProfile quando eles são conectados ou desconectados do serviço.
  3. Use getProfileProxy() para estabelecer uma conexão com o objeto de proxy de perfil associado ao perfil. No exemplo a seguir, o objeto de proxy de perfil é uma instância de BluetoothHeadset.
  4. Em onServiceConnected(), consiga um handle para o objeto de proxy de perfil.
  5. Quando você tiver o objeto de proxy de perfil, use-o para monitorar o estado da conexão e executar outras operações relevantes para esse perfil.

O snippet de código a seguir mostra como se conectar a um objeto de proxy BluetoothHeadset para que você possa controlar o perfil Headset:

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 AT específicos de fornecedores

Os apps podem se registrar para receber transmissões do sistema de comandos AT predefinidos específicos do fornecedor enviados por fones de ouvido (como um comando +XEVENT da Plantronics). Por exemplo, um app pode receber transmissões que indicam o nível de bateria de um dispositivo conectado e pode notificar o usuário ou realizar outra ação, conforme necessário. Crie um broadcast receiver para a intent ACTION_VENDOR_SPECIFIC_HEADSET_EVENT para processar comandos AT específicos do fornecedor para o fone de ouvido.

Perfil Health Device

O Android oferece suporte ao perfil Health Device (HDP) do Bluetooth. A API Bluetooth Health inclui as classes BluetoothHealth, BluetoothHealthCallback e BluetoothHealthAppConfiguration, descritas em Principais classes e interfaces.

Ao usar a API Bluetooth Health, é útil entender estes conceitos importantes do HDP:

Fonte
Um dispositivo de saúde, como uma balança, um medidor de glicose ou um termômetro, que transmite dados médicos para um dispositivo inteligente, como um smartphone ou tablet Android.
Coletor
O dispositivo inteligente que recebe dados médicos. Em um app HDP, o coletor é representado por um objeto BluetoothHealthAppConfiguration.
Registro
Processo usado para registrar um coletor e se comunicar com um dispositivo de saúde específico.
Conexão
O processo usado para abrir um canal entre um dispositivo de saúde (fonte) e um dispositivo inteligente (coletor).

Criar um app HDP

Veja as etapas básicas envolvidas na criação de um app HDP:

  1. Consiga uma referência para o objeto de proxy BluetoothHealth. Assim como acontece com os dispositivos com perfil normal e A2DP, você precisa chamar getProfileProxy() com um BluetoothProfile.ServiceListener e o tipo de perfil HEALTH para estabelecer uma conexão com o objeto de proxy de perfil.

  2. Crie um BluetoothHealthCallback e registre uma configuração de app (BluetoothHealthAppConfiguration) que funcione como coletor de integridade.

  3. Estabeleça uma conexão a um dispositivo de saúde.

  4. Quando conectado a um dispositivo de saúde, leia e grave no dispositivo de saúde usando o descritor de arquivos. Os dados recebidos precisam ser interpretados usando um gerenciador de integridade, que implementa as especificações IEEE 11073.

  5. Quando terminar, feche o canal de saúde e cancele a inscrição do app. O canal também será fechado quando houver inatividade prolongada.