
Android bietet einen Standard-Bluetooth-Stack, der sowohl Bluetooth Classic als auch Bluetooth Low Energy unterstützt. Mit 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.
Unter Android 4.3 und höher bietet der Android-Bluetooth-Stack die Möglichkeit, Bluetooth Low Energy (BLE) zu implementieren. Wenn Sie die BLE APIs optimal nutzen möchten, beachten Sie die Bluetooth-HCI-Anforderungen von Android. Android-Geräte mit einem qualifizierten Chipsatz können entweder Bluetooth Classic oder sowohl Bluetooth Classic 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 geeignet. Damit verfügbare Bluetooth 5-Funktionen verwendet werden können, muss das Gerät einen Bluetooth 5-kompatiblen Chipsatz haben.
Android-Architektur
Eine Bluetooth-App kommuniziert über Binder mit dem Bluetooth-Prozess. Der Bluetooth-Prozess verwendet JNI, um mit dem Bluetooth-Stack zu kommunizieren, und bietet Entwicklern Zugriff auf verschiedene Bluetooth-Profile. Dieses Diagramm zeigt die allgemeine Struktur des Bluetooth-Stacks:

- App-Framework
- Auf App-Framework-Ebene befindet sich der App-Code, der die APIs android.bluetooth verwendet, um mit der Bluetooth-Hardware zu interagieren. Intern ruft dieser Code den Bluetooth-Prozess über den Binder-IPC-Mechanismus auf.
- Bluetooth-App
-
Die Bluetooth-App unter
packages/modules/Bluetooth/android/app
ist als Android-App verpackt und implementiert die Bluetooth-Profile in der Android-Framework-Ebene. Diese App ruft den nativen Bluetooth-Stack über JNI 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, z. B. wenn Geräte gefunden werden. - Bluetooth-Stack
-
Der Standard-Bluetooth-Stack wird in AOSP bereitgestellt und befindet sich unter
packages/modules/Bluetooth/system
. Der Stack implementiert die generische Bluetooth HAL und passt sie mit Erweiterungen und Konfigurationsänderungen an. - Implementierung durch den Anbieter
- Anbietergeräte interagieren über die Hardware Interface Design Language (HIDL) mit dem Bluetooth-Stack.
HIDL
HIDL definiert die Schnittstelle zwischen dem Bluetooth-Stack und der Implementierung des Anbieters. Um die Bluetooth-HIDL-Dateien zu generieren, geben Sie die Bluetooth-Schnittstellendateien an das HIDL-Generierungstool weiter. Die Benutzeroberflächendateien befinden sich unter hardware/interfaces/bluetooth
.
Entwicklung des Bluetooth-Stacks
Der Android-Bluetooth-Stack ist ein vollständig qualifizierter Bluetooth-Stack. Die Liste der Qualifikationen finden Sie auf der Website der Bluetooth SIG unter QDID 169365.
Der Bluetooth-Stack befindet sich unter
packages/modules/Bluetooth
. Die Entwicklung erfolgt in AOSP und Beiträge sind willkommen.
Architektur von Android 7.x und niedriger
Ein Bluetooth-Systemdienst kommuniziert über JNI mit dem Bluetooth-Stack und über Binder IPC mit Apps. Der Systemdienst bietet Entwicklern Zugriff auf verschiedene Bluetooth-Profile. Dieses Diagramm zeigt die allgemeine Struktur des Bluetooth-Stacks:

- App-Framework
-
Auf App-Framework-Ebene befindet sich der App-Code, der die
android.bluetooth
APIs zur Interaktion mit der Bluetooth-Hardware verwendet. Intern ruft dieser Code den Bluetooth-Prozess über den Binder-IPC-Mechanismus auf. - Bluetooth-Systemdienst
-
Der Bluetooth-Systemdienst befindet sich in
packages/apps/Bluetooth
, ist als Android-App verpackt und implementiert den Bluetooth-Dienst und die Bluetooth-Profile in der Android-Framework-Ebene. Diese App ruft die HAL-Ebene über JNI auf. - JNI
-
Der JNI-Code, der mit
android.bluetooth
verknüpft ist, befindet sich in
packages/apps/Bluetooth/jni
. Der JNI-Code ruft die HAL-Ebene auf und empfängt Rückrufe von der HAL, wenn bestimmte Bluetooth-Vorgänge auftreten, z. B. wenn Geräte gefunden werden. - HAL
-
Die Hardwareabstraktionsschicht 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 Kopfdatei für die Bluetooth-HAL lautet
hardware/libhardware/include/hardware/bluetooth.h
. Prüfen Sie außerdem allehardware/libhardware/include/hardware/bt_*.h
-Dateien. - Bluetooth-Stack
-
Der Standard-Bluetooth-Stack wird Ihnen zur Verfügung gestellt und befindet sich unter
system/bt
. Der Stack implementiert die generische Bluetooth-HAL und passt sie mit Erweiterungen und Konfigurationsänderungen an. - Anbietererweiterungen
- Wenn Sie benutzerdefinierte Erweiterungen und eine HCI-Ebene für das Tracing hinzufügen möchten, können Sie ein libbt-Vendor-Modul erstellen und diese Komponenten angeben.
HAL implementieren
Die Bluetooth HAL befindet sich unter /hardware/libhardware/include/hardware/bluetooth.h
. Die Datei bluetooth.h
enthält die grundlegende Schnittstelle für den Bluetooth-Stack. Sie müssen die Funktionen implementieren.
Profilspezifische Dateien befinden sich im selben Verzeichnis. Weitere Informationen finden Sie in der HAL-Dateireferenz.