Bluetooth

Android Bluetooth HAL-Symbol

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:

Android-Bluetooth-Architektur
Abbildung 1: Bluetooth-Architektur von Android
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 JNI-Code, der mit android.bluetooth verknüpft ist, 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 Anbieterimplementierung. 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:

Android-Bluetooth-Architektur
Abbildung 2. Bluetooth-Architektur von Android 7.x und niedriger
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-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 alle hardware/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

Der 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.