
Android udostępnia domyślny moduł Bluetooth, który obsługuje zarówno klasyczny Bluetooth, jak i Bluetooth Low Energy. Za pomocą Bluetootha urządzenia z Androidem mogą tworzyć sieci osobiste, aby przesyłać i odbierać dane z urządzeń Bluetooth w pobliżu.
W Androidzie 4.3 i nowszych pakiet Bluetooth umożliwia implementację Bluetooth Low Energy (BLE). Aby w pełni korzystać z interfejsów BLE API, postępuj zgodnie z wymaganiami HCI dotyczącymi Bluetootha na Androidzie. Urządzenia z Androidem z kwalifikującym się chipsetem mogą stosować klasyczny Bluetooth lub oba standardy: klasyczny Bluetooth i BLE. BLE nie jest zgodny wstecz ze starszymi chipsetami Bluetooth.
W Androidzie 8.0 natywny moduł Bluetooth jest w pełni zgodny z Bluetooth 5. Aby korzystać z dostępnych funkcji Bluetooth 5, urządzenie musi mieć odpowiedni układ Bluetooth 5.
Architektura Androida
Aplikacja Bluetooth komunikuje się z procesem Bluetooth za pomocą Bindera. Proces Bluetooth używa JNI do komunikacji z kompletem Bluetooth i daje deweloperom dostęp do różnych profili Bluetooth. Ten diagram pokazuje ogólną strukturę pakietu Bluetooth:

- Platforma aplikacji
- Na poziomie frameworku aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API android.bluetooth do interakcji z sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth za pomocą mechanizmu Binder IPC.
- Aplikacja Bluetooth
- Aplikacja Bluetooth, która znajduje się w
packages/modules/Bluetooth/android/app
, jest spakowana jako aplikacja na Androida i implementuje profile Bluetooth na poziomie platformy Androida. Ta aplikacja wywołuje natywny stos Bluetooth za pomocą JNI. - JNI
- Kod JNI powiązany z android.bluetooth znajduje się w pliku
packages/modules/Bluetooth/android/app/jni
. Kod JNI wywołuje stos Bluetooth podczas wykonywania określonych operacji Bluetooth, takich jak wykrywanie urządzeń. - Stos Bluetooth
- Domyślny stos Bluetooth jest dostarczany w AOSP i znajduje się w
packages/modules/Bluetooth/system
. Stos implementuje ogólne interfejsy HAL Bluetooth i dostosowuje je za pomocą rozszerzeń oraz zmian konfiguracji. - Implementacja przez dostawcę
- Urządzenia dostawcy komunikują się z kompletem Bluetooth za pomocą języka interfejsu sprzętowego (HIDL).
HIDL
HIDL definiuje interfejs między stosem Bluetooth a implementacją dostawcy. Aby wygenerować pliki Bluetooth HIDL, prześlij pliki interfejsu Bluetooth do narzędzia do generowania HIDL. Pliki interfejsu znajdują się w folderze hardware/interfaces/bluetooth
.
Tworzenie stosu Bluetooth
Pakiet Bluetooth w Androidzie to w pełni kwalifikowany pakiet Bluetooth. Informacje o kwalifikacji znajdują się na stronie internetowej Bluetooth SIG pod identyfikatorem QDID 169365.
Główny moduł Bluetooth znajduje się w folderze
packages/modules/Bluetooth
. Rozwój odbywa się w AOSP, a współpraca jest mile widziana.
Architektura Androida 7.x i starszych
Usługa systemowa Bluetooth komunikuje się z kompletem Bluetooth za pomocą JNI oraz z aplikacjami za pomocą interfejsu Binder IPC. Usługa systemowa zapewnia deweloperom dostęp do różnych profili Bluetooth. Ten diagram pokazuje ogólną strukturę modułu Bluetooth:

- Platforma aplikacji
- Na poziomie platformy aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API
android.bluetooth
do interakcji z sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth za pomocą mechanizmu Binder IPC. - Usługa systemowa Bluetooth
- Usługa systemowa Bluetooth znajdująca się w
packages/apps/Bluetooth
jest spakowana jako aplikacja na Androida i implementuje usługę Bluetooth oraz profile na poziomie platformy Android. Aplikacja wywołuje warstwę HAL za pomocą JNI. - JNI
- Kod JNI powiązany z
android.bluetooth
znajduje się w
packages/apps/Bluetooth/jni
. Kod JNI wywołuje warstwę HAL i otrzymuje od niej wywołania zwrotne, gdy występują określone operacje Bluetooth, np. wykrywanie urządzeń. - HAL
- Warstwę abstrakcji sprzętowej definiuje standardowy interfejs, do którego odwołują się interfejsy API
android.bluetooth i proces Bluetooth. Musisz go zaimplementować, aby sprzęt Bluetooth działał prawidłowo. Plik nagłówka interfejsu Bluetooth HAL to:
hardware/libhardware/include/hardware/bluetooth.h
. Dodatkowo sprawdź wszystkie plikihardware/libhardware/include/hardware/bt_*.h
. - Stos Bluetooth
- Domyślny moduł Bluetooth jest dostępny w
system/bt
. Stos implementuje ogólne interfejsy HAL Bluetooth i dostosowuje je za pomocą rozszerzeń oraz zmian konfiguracji. - Rozszerzenia dotyczące dostawców
- Aby dodać rozszerzenia niestandardowe i warstwę interfejsu HCI do śledzenia, możesz utworzyć moduł libbt-vendor i określić te komponenty.
Wdrażanie interfejsu HAL
Interfejs HAL Bluetooth znajduje się w folderze /hardware/libhardware/include/hardware/bluetooth.h
. Plik bluetooth.h
zawiera podstawowy interfejs modułu Bluetooth, którego funkcje musisz zaimplementować.
Pliki dotyczące poszczególnych profili znajdują się w tym samym katalogu. Więcej informacji znajdziesz w pliku referencyjnym HAL.