
O Android oferece uma pilha Bluetooth padrão que oferece suporte ao Bluetooth clássico e ao Bluetooth de baixa energia. Usando o Bluetooth, os dispositivos Android podem criar redes de área pessoal para enviar e receber dados com dispositivos Bluetooth por perto.
No Android 4.3 e versões mais recentes, a pilha Bluetooth do Android oferece a capacidade de implementar o Bluetooth de baixa energia (BLE). Para aproveitar ao máximo as APIs BLE, siga os requisitos de HCI do Bluetooth do Android. Dispositivos Android com um chipset qualificado podem implementar o Bluetooth Classic ou o Bluetooth Classic e o BLE. O BLE não é compatível com chipsets Bluetooth mais antigos.
No Android 8.0, a pilha Bluetooth nativa é totalmente qualificada para Bluetooth 5. Para usar os recursos disponíveis do Bluetooth 5, o dispositivo precisa ter um chipset qualificado para Bluetooth 5.
Arquitetura do Android
Um app Bluetooth se comunica com o processo Bluetooth pelo Binder. O processo Bluetooth usa JNI para se comunicar com a pilha Bluetooth e fornece aos desenvolvedores acesso a vários perfis Bluetooth. Este diagrama mostra a estrutura geral da pilha Bluetooth:

- Framework do app
- No nível do framework do app, está o código do app, que usa as APIs android.bluetooth para interagir com o hardware Bluetooth. Internamente, esse código chama o processo Bluetooth pelo mecanismo de IPC do Binder.
- App Bluetooth
-
O app Bluetooth, localizado em
packages/modules/Bluetooth/android/app
, é empacotado como um app Android e implementa os perfis Bluetooth na camada do framework Android. Esse app chama a pilha Bluetooth nativa usando a JNI. - JNI
-
O código JNI associado ao android.bluetooth está localizado em
packages/modules/Bluetooth/android/app/jni
. O código JNI chama a pilha Bluetooth quando determinadas operações do Bluetooth ocorrem, como quando os dispositivos são descobertos. - Pilha Bluetooth
-
A pilha Bluetooth padrão é fornecida no AOSP e está localizada em
packages/modules/Bluetooth/system
. A pilha implementa o HAL genérico do Bluetooth e o personaliza com extensões e mudanças de configuração. - Implementação do fornecedor
- Os dispositivos do fornecedor interagem com a pilha Bluetooth usando o Language de design de interface de hardware (HIDL, na sigla em inglês).
HIDL
O HIDL define a interface entre a
pilha de Bluetooth e a implementação do fornecedor. Para gerar os arquivos HIDL do Bluetooth, transmita os
arquivos de interface do Bluetooth para a ferramenta de geração de HIDL. Os arquivos de interface estão localizados em
hardware/interfaces/bluetooth
.
Desenvolvimento de pilha Bluetooth
A pilha Bluetooth do Android é uma pilha Bluetooth totalmente qualificada. A lista de qualificação está no site do Bluetooth SIG em QDID 169365.
A pilha principal do Bluetooth está em
packages/modules/Bluetooth
. O desenvolvimento acontece no AOSP, e as contribuições são bem-vindas.
Arquitetura do Android 7.x e versões anteriores
Um serviço do sistema Bluetooth se comunica com a pilha Bluetooth pelo JNI e com apps pelo IPC do Binder. O serviço do sistema oferece aos desenvolvedores acesso a vários perfis de Bluetooth. Este diagrama mostra a estrutura geral da pilha Bluetooth:

- Framework do app
-
No nível do framework do app, está o código do app, que usa as
APIs
android.bluetooth
para interagir com o hardware Bluetooth. Internamente, esse código chama o processo Bluetooth pelo mecanismo de IPC do Binder. - Serviço do sistema Bluetooth
-
O serviço do sistema Bluetooth, localizado em
packages/apps/Bluetooth
, é empacotado como um app Android e implementa o serviço e os perfis do Bluetooth na camada do framework Android. Esse app chama a camada HAL pela JNI. - JNI
-
O código JNI associado a
android.bluetooth
está localizado em
packages/apps/Bluetooth/jni
. O código JNI chama a camada HAL e recebe callbacks dela quando determinadas operações do Bluetooth ocorrem, como quando os dispositivos são descobertos. - HAL
-
A camada de abstração de hardware define a interface padrão que as
APIs
android.bluetooth
e o processo Bluetooth chamam e que você precisa implementar para que o hardware
Bluetooth funcione corretamente. O arquivo de cabeçalho da HAL do Bluetooth é
hardware/libhardware/include/hardware/bluetooth.h
. Além disso, revise todos os arquivoshardware/libhardware/include/hardware/bt_*.h
. - Pilha Bluetooth
-
A pilha Bluetooth padrão é fornecida para você e está localizada em
system/bt
. A pilha implementa o HAL genérico do Bluetooth e o personaliza com extensões e mudanças de configuração. - Extensões do fornecedor
- Para adicionar extensões personalizadas e uma camada HCI para rastreamento, crie um módulo libbt-vendor e especifique esses componentes.
Implementar a HAL
O HAL do Bluetooth está localizado em
/hardware/libhardware/include/hardware/bluetooth.h
. O
arquivo bluetooth.h
contém a interface básica da pilha Bluetooth, e você
precisa implementar as funções dela.
Os arquivos específicos do perfil estão localizados no mesmo diretório. Para saber mais, consulte a Referência do arquivo HAL.