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: Android-Bluetooth-Architektur
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:

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

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.