
Android fornisce uno stack Bluetooth predefinito che supporta sia il Bluetooth Classic sia il Bluetooth Low Energy. Tramite il Bluetooth, i dispositivi Android possono creare reti di area personale per inviare e ricevere dati con i dispositivi Bluetooth nelle vicinanze.
In Android 4.3 e versioni successive, lo stack Bluetooth di Android offre la possibilità di implementare Bluetooth Low Energy (BLE). Per sfruttare appieno le API BLE, segui i Requisiti HCI Bluetooth di Android. I dispositivi Android con un chipset idoneo possono implementare il Bluetooth Classic o entrambi Bluetooth Classic e BLE. BLE non è compatibile con i chipset Bluetooth precedenti.
In Android 8.0, lo stack Bluetooth nativo è completamente qualificato per il Bluetooth 5. Per utilizzare le funzionalità Bluetooth 5 disponibili, il dispositivo deve avere un chipset Bluetooth 5 qualificato.
Architettura Android
Un'app Bluetooth comunica con il processo Bluetooth tramite Binder. Il processo Bluetooth utilizza JNI per comunicare con lo stack Bluetooth e fornisce agli sviluppatori accesso a vari profili Bluetooth. Questo diagramma mostra la struttura generale dello stack Bluetooth:

- Framework per app
- A livello di framework dell'app si trova il codice dell'app, che utilizza le API android.bluetooth per interagire con l'hardware Bluetooth. Internamente, questo codice chiama il processo Bluetooth tramite il meccanismo IPC di Binder.
- App Bluetooth
-
L'app Bluetooth, situata in
packages/modules/Bluetooth/android/app
, è pacchettizzata come app per Android e implementa i profili Bluetooth a livello di framework Android. Questa app richiama lo stack Bluetooth nativo tramite JNI. - JNI
-
Il codice JNI associato ad android.bluetooth si trova in
packages/modules/Bluetooth/android/app/jni
. Il codice JNI richiama lo stiva Bluetooth quando si verificano determinate operazioni Bluetooth, ad esempio quando vengono rilevati i dispositivi. - Stack Bluetooth
-
Lo stack Bluetooth predefinito è fornito in AOSP e si trova in
packages/modules/Bluetooth/system
. Lo stack implementa l'HAL Bluetooth generico e lo personalizza con estensioni e modifiche alla configurazione. - Implementazione del fornitore
- I dispositivi del fornitore interagiscono con lo stack Bluetooth utilizzando il linguaggio di progettazione dell'interfaccia hardware (HIDL).
HIDL
HIDL definisce l'interfaccia tra lo stack Bluetooth e l'implementazione del fornitore. Per generare i file HIDL Bluetooth, passa i
file di interfaccia Bluetooth allo strumento di generazione HIDL. I file di interfaccia si trovano in
hardware/interfaces/bluetooth
.
Sviluppo dello stack Bluetooth
Lo stack Bluetooth di Android è uno stack Bluetooth completo. La voce di qualifica è disponibile sul sito web di Bluetooth SIG nella sezione QDID 169365.
Lo stack Bluetooth di base si trova in
packages/modules/Bluetooth
. Lo sviluppo avviene in AOSP e sono benvenuti i contributi.
Architettura di Android 7.x e versioni precedenti
Un servizio di sistema Bluetooth comunica con lo stack Bluetooth tramite JNI e con le app tramite Binder IPC. Il servizio di sistema fornisce agli sviluppatori l'accesso a vari profili Bluetooth. Questo diagramma mostra la struttura generale dello stack Bluetooth:

- Framework per app
-
A livello di framework dell'app si trova il codice dell'app, che utilizza le API
android.bluetooth
per interagire con l'hardware Bluetooth. Internamente, questo codice chiama il processo Bluetooth tramite il meccanismo IPC di Binder. - Servizio di sistema Bluetooth
-
Il servizio di sistema Bluetooth, che si trova in
packages/apps/Bluetooth
, è pacchettizzato come app Android e implementa il servizio e i profili Bluetooth a livello di framework Android. Questa app chiama il livello HAL tramite JNI. - JNI
-
Il codice JNI associato a
android.bluetooth
si trova in
packages/apps/Bluetooth/jni
. Il codice JNI richiama il livello HAL e riceve i callback dall'HAL quando si verificano determinate operazioni Bluetooth, ad esempio quando vengono rilevati i dispositivi. - HAL
-
Il livello di astrazione hardware definisce l'interfaccia standard invocata dalle API
android.bluetooth
e dal processo Bluetooth e che devi implementare per il corretto funzionamento dell'hardware Bluetooth. Il file di intestazione per l'HAL Bluetooth è
hardware/libhardware/include/hardware/bluetooth.h
. Inoltre, controlla tutti i filehardware/libhardware/include/hardware/bt_*.h
. - Stack Bluetooth
-
Lo stack Bluetooth predefinito è fornito e si trova in
system/bt
. Lo stack implementa l'HAL Bluetooth generico e lo personalizza con estensioni e modifiche alla configurazione. - Estensioni del fornitore
- Per aggiungere estensioni personalizzate e un livello HCI per il monitoraggio, puoi creare un modulo libbt-vendor e specificare questi componenti.
Implementa l'HAL
L'HAL Bluetooth si trova in
/hardware/libhardware/include/hardware/bluetooth.h
. Il
bluetooth.h
file contiene l'interfaccia di base per lo stack Bluetooth e devi
implementarne le funzioni.
I file specifici del profilo si trovano nella stessa directory. Per maggiori dettagli, consulta il riferimento file HAL.