Profili Bluetooth

L'API Bluetooth include il supporto per i profili Bluetooth. Un profilo Bluetooth è una specifica di interfaccia wireless per la comunicazione basata su Bluetooth tra dispositivi, ad esempio il profilo Vivavoce. Affinché un dispositivo mobile possa collegarsi a cuffie wireless, entrambi i dispositivi devono supportare il profilo vivavoce.

L'API Bluetooth fornisce implementazioni per i seguenti profili Bluetooth:

  • Cuffie. Il profilo Cuffie supporta l'uso di cuffie Bluetooth con i cellulari. Android fornisce la classe BluetoothHeadset, che è un proxy per il controllo del servizio cuffie Bluetooth. Sono inclusi i profili per cuffie Bluetooth e vivavoce (v1.5). La classe BluetoothHeadset include il supporto per i comandi AT. Per saperne di più su questo argomento, consulta Comandi AT specifici del fornitore.
  • A2DP. Il profilo A2DP (Advanced Audio Distribution Profile) definisce la modalità di streaming dell'audio di alta qualità da un dispositivo all'altro tramite una connessione Bluetooth. Android fornisce la classe BluetoothA2dp, che è un proxy per il controllo del servizio Bluetooth A2DP.
  • Dispositivo sanitario. Android fornisce supporto per il profilo HDP (Bluetooth Health Device Profile). In questo modo puoi creare app che utilizzano il Bluetooth per comunicare con dispositivi per la salute che supportano il Bluetooth, come rilevatori del battito cardiaco, misuratori del sangue, termometri, bilance e così via. Per un elenco dei dispositivi supportati e dei corrispondenti codici di specializzazione dei dati del dispositivo, consulta le Specializzazioni dei dati dei dispositivi HDP di Bluetooth. Questi valori sono inoltre riportati nella specifica ISO/IEEE 11073-20601 [7] come MDC_DEV_SPEC_PROFILE_* nell'allegato dei codici della nomenclatura. Per ulteriori informazioni sull'HDP, consulta la sezione Profilo del dispositivo sanitario.

Di seguito sono riportati i passaggi di base per lavorare con un profilo:

  1. Procurati l'adattatore predefinito, come descritto nella sezione Configurazione Bluetooth.
  2. Configura una BluetoothProfile.ServiceListener. Questo listener notifica i client BluetoothProfile quando sono stati connessi o disconnessi dal servizio.
  3. Utilizza getProfileProxy() per stabilire una connessione all'oggetto proxy del profilo associato al profilo. Nell'esempio seguente, l'oggetto proxy del profilo è un'istanza di BluetoothHeadset.
  4. In onServiceConnected(), recupera un handle per l'oggetto proxy del profilo.
  5. Una volta ottenuto l'oggetto proxy del profilo, utilizzalo per monitorare lo stato della connessione ed eseguire altre operazioni pertinenti al profilo.

Il seguente snippet di codice mostra come connetterti a un oggetto proxy BluetoothHeadset per poter controllare il profilo Cuffie:

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);

Comandi AT specifici del fornitore

Le app possono registrarsi per ricevere trasmissioni di sistema di comandi AT predefiniti specifici del fornitore inviati da cuffie (come un comando Plantronics +XEVENT). Ad esempio, un'app potrebbe ricevere annunci che indicano il livello della batteria di un dispositivo connesso e potrebbe inviare una notifica all'utente o intraprendere altre azioni a seconda delle necessità. Crea un ricevitore trasmesso per l'intent ACTION_VENDOR_SPECIFIC_HEADSET_EVENT al fine di gestire comandi AT specifici del fornitore per le cuffie.

Profilo dispositivo per la salute

Android supporta Bluetooth Health Device Profile (HDP). L'API Bluetooth Health include le classi BluetoothHealth, BluetoothHealthCallback e BluetoothHealthAppConfiguration, descritte in Classi e interfacce chiave.

Quando si utilizza l'API Bluetooth Health, è utile comprendere i seguenti concetti chiave dell'HDP:

Fonte
Un dispositivo per la salute, ad esempio una bilancia, un misuratore della glicemia o un termometro, che trasmette dati medici a uno smart device, ad esempio uno smartphone o un tablet Android.
Lavello
Lo smart device che riceve i dati medici. In un'app HDP, il sink è rappresentato da un oggetto BluetoothHealthAppConfiguration.
Iscrizione
Il processo utilizzato per registrare un sink per la comunicazione con un determinato dispositivo sanitario.
Connessione
La procedura utilizzata per aprire un canale tra un dispositivo sanitario (sorgente) e uno smart device (sink).

Crea un'app HDP

Di seguito sono riportati i passaggi di base necessari per la creazione di un'app HDP:

  1. Recupera un riferimento all'oggetto proxy BluetoothHealth. Come per i normali dispositivi con cuffie e con profilo A2DP, devi chiamare getProfileProxy() con BluetoothProfile.ServiceListener e il tipo di profilo HEALTH per stabilire una connessione con l'oggetto proxy del profilo.

  2. Crea un BluetoothHealthCallback e registra una configurazione dell'app (BluetoothHealthAppConfiguration) che funge da sink.

  3. Stabilisci una connessione a un dispositivo per l'integrità.

  4. Una volta eseguita correttamente la connessione a un dispositivo per l'integrità, leggi e scrivi sul dispositivo per l'integrità utilizzando il descrittore del file. I dati ricevuti devono essere interpretati utilizzando un gestore sanitario, che implementa le specifiche dell'IEEE 11073.

  5. Al termine, chiudi il canale sanitario e annulla la registrazione dell'app. Il canale si chiude anche in caso di inattività prolungata.