![Android Bluetooth HAL-Symbol](https://source.android.com/static/docs/core/connect/bluetooth/images/ape_fwk_hal_bluetooth.png?authuser=6&hl=de)
Android bietet einen Standard-Bluetooth-Stack, der sowohl klassisches Bluetooth als auch Bluetooth Low Energy unterstützt. Mithilfe von Bluetooth können Android-Geräte persönliche Netzwerke erstellen, um Daten mit Bluetooth-Geräten in der Nähe zu senden und zu empfangen.
In Android 4.3 und höher bietet der Android Bluetooth-Stack die Möglichkeit, Bluetooth Low Energy (BLE) zu implementieren. Um die BLE-APIs vollständig nutzen zu können, befolgen Sie die Android Bluetooth HCI-Anforderungen . Android-Geräte mit einem qualifizierten Chipsatz können entweder klassisches Bluetooth oder sowohl klassisches Bluetooth als auch BLE implementieren. BLE ist nicht abwärtskompatibel mit älteren Bluetooth-Chipsätzen.
In Android 8.0 ist der native Bluetooth-Stack vollständig für Bluetooth 5 qualifiziert. Um die verfügbaren Bluetooth 5-Funktionen nutzen zu können, muss das Gerät über einen Bluetooth 5-qualifizierten Chipsatz verfügen.
Android-Architektur
Eine Bluetooth-Anwendung kommuniziert über Binder mit dem Bluetooth-Prozess. Der Bluetooth-Prozess nutzt JNI zur Kommunikation mit dem Bluetooth-Stack und bietet Entwicklern Zugriff auf verschiedene Bluetooth-Profile. Dieses Diagramm zeigt die allgemeine Struktur des Bluetooth-Stacks:
![Android-Bluetooth-Architektur](https://source.android.com/static/docs/core/connect/bluetooth/images/fluoride_architecture.png?authuser=6&hl=de)
- Anwendungsrahmen
- Auf der Ebene des Anwendungsframeworks befindet sich Anwendungscode, der die android.bluetooth -APIs verwendet, um mit der Bluetooth-Hardware zu interagieren. Intern ruft dieser Code den Bluetooth-Prozess über den Binder IPC-Mechanismus auf.
- Bluetooth-Anwendung
- Die Bluetooth-Anwendung, die sich in
packages/modules/Bluetooth/android/app
befindet, ist als Android-App verpackt und implementiert die Bluetooth-Profile auf der Android-Framework-Ebene. Diese App ruft über JNI den nativen Bluetooth-Stack auf. - JNI
- Der mit android.bluetooth verknüpfte JNI-Code befindet sich in
packages/modules/Bluetooth/android/app/jni
. Der JNI-Code ruft den Bluetooth-Stack auf, wenn bestimmte Bluetooth-Vorgänge stattfinden, beispielsweise wenn Geräte erkannt werden. - Bluetooth-Stack
- Der Standard-Bluetooth-Stack wird in AOSP bereitgestellt und befindet sich in
packages/modules/Bluetooth/system
. Der Stack implementiert das generische Bluetooth HAL und passt es mit Erweiterungen und Konfigurationsänderungen an. - Implementierung durch den Anbieter
- Herstellergeräte interagieren mit dem Bluetooth-Stack über die Hardware Interface Design Language (HIDL).
HIDL
HIDL definiert die Schnittstelle zwischen dem Bluetooth-Stack und der Anbieterimplementierung. Um die Bluetooth-HIDL-Dateien zu generieren, übergeben Sie die Bluetooth-Schnittstellendateien an das HIDL-Generierungstool. Die Schnittstellendateien befinden sich unter hardware/interfaces/bluetooth
.
Entwicklung eines Bluetooth-Stacks
Der Android-Bluetooth-Stack ist ein vollständig qualifizierter Bluetooth-Stack. Die Qualifikationsliste finden Sie auf der Bluetooth SIG-Website unter QDID 169365 .
Der Kern-Bluetooth-Stack befindet sich in packages/modules/Bluetooth
. Die Entwicklung findet in AOSP statt und Beiträge sind willkommen.
Android 7.x und frühere Architektur
Ein Bluetooth-Systemdienst kommuniziert mit dem Bluetooth-Stack über JNI und mit Anwendungen über Binder IPC. Der Systemdienst bietet Entwicklern Zugriff auf verschiedene Bluetooth-Profile. Dieses Diagramm zeigt die allgemeine Struktur des Bluetooth-Stacks:
![Android-Bluetooth-Architektur](https://source.android.com/static/docs/core/connect/bluetooth/images/ape_fwk_bluetooth.png?authuser=6&hl=de)
- Anwendungsrahmen
- Auf der Ebene des Anwendungsframeworks befindet sich Anwendungscode, der die android.bluetooth -APIs nutzt, um mit der Bluetooth-Hardware zu interagieren. Intern ruft dieser Code den Bluetooth-Prozess über den Binder IPC-Mechanismus auf.
- Bluetooth-Systemdienst
- Der Bluetooth-Systemdienst, der sich in
packages/apps/Bluetooth
befindet, ist als Android-App verpackt und implementiert den Bluetooth-Dienst und die Bluetooth-Profile auf der Android-Framework-Ebene. Diese App ruft über JNI die HAL-Schicht auf. - JNI
- Der mit android.bluetooth verknüpfte JNI-Code befindet sich in
packages/apps/Bluetooth/jni
. Der JNI-Code ruft die HAL-Schicht auf und empfängt Rückrufe von der HAL, wenn bestimmte Bluetooth-Vorgänge stattfinden, beispielsweise wenn Geräte erkannt werden. - HAL
- Die Hardware-Abstraktionsschicht definiert die Standardschnittstelle, die von den android.bluetooth -APIs und dem Bluetooth-Prozess aufgerufen wird und die Sie implementieren müssen, damit Ihre Bluetooth-Hardware ordnungsgemäß funktioniert. Die Header-Datei für die Bluetooth-HAL lautet
hardware/libhardware/include/hardware/bluetooth.h
. Überprüfen Sie außerdem alle Dateienhardware/libhardware/include/hardware/bt_*.h
. - Bluetooth-Stack
- Der Standard-Bluetooth-Stack wird für Sie bereitgestellt und befindet sich in
system/bt
. Der Stack implementiert das generische Bluetooth HAL und passt es mit Erweiterungen und Konfigurationsänderungen an. - Anbietererweiterungen
- Um benutzerdefinierte Erweiterungen und eine HCI-Ebene für die Ablaufverfolgung hinzuzufügen, können Sie ein libbt-vendor-Modul erstellen und diese Komponenten angeben.
Implementierung des HAL
Die Bluetooth-HAL befindet sich in /hardware/libhardware/include/hardware/bluetooth.h
. Die Datei bluetooth.h
enthält die grundlegende Schnittstelle für den Bluetooth-Stack und Sie müssen ihre Funktionen implementieren.
Profilspezifische Dateien befinden sich im selben Verzeichnis. Einzelheiten finden Sie in der HAL-Dateireferenz .