Die Bluetooth API unterstützt die Arbeit mit Bluetooth-Profilen. Ein Bluetooth-Profil ist eine Spezifikation für eine drahtlose Schnittstelle für die Bluetooth-basierte Kommunikation zwischen Geräten, z. B. das Freisprechprofil. Damit ein Mobilgerät mit einem kabellosen Headset verbunden werden kann, müssen beide Geräte das Freisprechprofil unterstützen.
Die Bluetooth API bietet Implementierungen für die folgenden Bluetooth-Profile:
- Headset: Das Headset-Profil bietet Unterstützung für Bluetooth-Headsets zur Verwendung mit Smartphones. Android stellt die Klasse
BluetoothHeadset
bereit, die ein Proxy zur Steuerung des Bluetooth-Headset-Dienstes ist. Dies gilt sowohl für das Bluetooth-Headset als auch für die Freisprechfunktion (Version 1.5). Die KlasseBluetoothHeadset
unterstützt AT-Befehle. Weitere Informationen zu diesem Thema finden Sie unter Anbieterspezifische AT-Befehle. - A2DP: Das Advanced Audio Distribution Profile (A2DP)-Profil definiert, wie Audio in hoher Qualität über eine Bluetooth-Verbindung von einem Gerät zu einem anderen gestreamt werden kann. Android stellt die Klasse
BluetoothA2dp
bereit, die ein Proxy zur Steuerung des Bluetooth A2DP-Diensts ist. - Gesundheitsgerät. Android bietet Unterstützung für das Bluetooth Health Device Profile (HDP). So kannst du Apps erstellen, die über Bluetooth mit Gesundheitsgeräten kommunizieren, die Bluetooth unterstützen, z. B. Herzfrequenzmesser, Blutmessgeräte, Thermometer und Waagen. Eine Liste der unterstützten Geräte und der entsprechenden Codes für Gerätedaten finden Sie unter HDP-Gerätedatenspezialisierungen von Bluetooth.
Auf diese Werte wird in der Spezifikation ISO/IEEE 11073-20601 [7] im Anhang der Nomenklaturcodes auch als
MDC_DEV_SPEC_PROFILE_*
verwiesen. Weitere Informationen zum HDP findest du unter Health Device Profile.
Dies sind die grundlegenden Schritte für die Arbeit mit einem Profil:
- Rufen Sie den Standardadapter ab, wie unter Bluetooth-Einrichtung beschrieben.
- Richten Sie eine
BluetoothProfile.ServiceListener
ein. Dieser Listener benachrichtigtBluetoothProfile
-Clients, wenn sie mit dem Dienst verbunden oder getrennt wurden. - Stellen Sie mit
getProfileProxy()
eine Verbindung zum Profil-Proxy-Objekt her, das dem Profil zugeordnet ist. Im folgenden Beispiel ist das Profil-Proxy-Objekt eine Instanz vonBluetoothHeadset
. - Rufen Sie in
onServiceConnected()
einen Handle zum Profil-Proxyobjekt ab. - Sobald Sie das Profil-Proxy-Objekt haben, können Sie damit den Verbindungsstatus überwachen und andere Vorgänge ausführen, die für dieses Profil relevant sind.
Das folgende Code-Snippet zeigt, wie Sie eine Verbindung zu einem BluetoothHeadset
-Proxyobjekt herstellen, um das Headset-Profil zu steuern:
Kotlin
var bluetoothHeadset: BluetoothHeadset? = null // Get the default adapter val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter() private val profileListener = object : BluetoothProfile.ServiceListener { override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = proxy as BluetoothHeadset } } override fun onServiceDisconnected(profile: Int) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = null } } } // Establish connection to the proxy. bluetoothAdapter?.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET) // ... call functions on bluetoothHeadset // Close proxy connection after use. bluetoothAdapter?.closeProfileProxy(BluetoothProfile.HEADSET, bluetoothHeadset)
Java
BluetoothHeadset bluetoothHeadset; // Get the default adapter BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); private BluetoothProfile.ServiceListener profileListener = new BluetoothProfile.ServiceListener() { public void onServiceConnected(int profile, BluetoothProfile proxy) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = (BluetoothHeadset) proxy; } } public void onServiceDisconnected(int profile) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = null; } } }; // Establish connection to the proxy. bluetoothAdapter.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET); // ... call functions on bluetoothHeadset // Close proxy connection after use. bluetoothAdapter.closeProfileProxy(bluetoothHeadset);
Anbieterspezifische AT-Befehle
Apps können sich für den Empfang von System-Broadcasts vordefinierter anbieterspezifischer AT-Befehle registrieren, die über ein Headset gesendet werden (z. B. ein Plantronics +XEVENT-Befehl). Beispielsweise kann eine App Broadcasts empfangen, die den Akkustand eines verbundenen Geräts anzeigen, und den Nutzer benachrichtigen oder bei Bedarf andere Maßnahmen ergreifen. Erstellen Sie einen Broadcast-Empfänger für den ACTION_VENDOR_SPECIFIC_HEADSET_EVENT
-Intent, um anbieterspezifische AT-Befehle für das Headset zu verarbeiten.
Profil für Gesundheitsgeräte
Android unterstützt das Bluetooth Health Device Profile (HDP). Die Bluetooth Health API enthält die Klassen BluetoothHealth
, BluetoothHealthCallback
und BluetoothHealthAppConfiguration
, die unter Schlüsselklassen und Schnittstellen beschrieben werden.
Wenn Sie die Bluetooth Health API verwenden, ist es hilfreich, die folgenden HDP-Konzepte zu verstehen:
- Quelle
- Ein Gesundheitsgerät, z. B. eine Gewichtswaage, ein Blutzuckermessgerät oder ein Thermometer, das medizinische Daten an ein Smart-Home-Gerät wie ein Android-Smartphone oder -Tablet überträgt.
- Waschbecken
- Das Smart-Home-Gerät, das die medizinischen Daten empfängt. In einer HDP-Anwendung wird die Senke durch ein
BluetoothHealthAppConfiguration
-Objekt dargestellt. - Anmeldungen
- Der Prozess, mit dem eine Senke für die Kommunikation mit einem bestimmten Systemgerät registriert wird.
- Beziehung
- Der Prozess, der zum Öffnen eines Kanals zwischen einem Gerät mit Gesundheitsfunktionen (Quelle) und einem Smart-Home-Gerät (Senke) verwendet wird.
HDP-Anwendung erstellen
Dies sind die grundlegenden Schritte zum Erstellen einer HDP-Anwendung:
Rufen Sie einen Verweis zum Proxy-Objekt
BluetoothHealth
ab. Wie bei normalen Headset- und A2DP-Profilgeräten müssen SiegetProfileProxy()
mit dem ProfiltypBluetoothProfile.ServiceListener
und dem ProfiltypHEALTH
aufrufen, um eine Verbindung zum Profil-Proxyobjekt herzustellen.Erstellen Sie einen
BluetoothHealthCallback
und registrieren Sie eine Anwendungskonfiguration (BluetoothHealthAppConfiguration
), die als Senke dient.Verbindung zu einem Gerät mit Gesundheitsfunktionen herstellen.
Wenn die Verbindung erfolgreich mit einem Gerät mit Systemüberwachung hergestellt ist, können Sie mithilfe des Dateideskriptors auf diesem Gerät Daten aus dem System lesen und schreiben. Die empfangenen Daten müssen mit einem Systemmanager interpretiert werden, der die IEEE 11073-Spezifikationen implementiert.
Schließen Sie danach den Statuskanal und heben Sie die Registrierung der App auf. Der Kanal wird auch bei längerer Inaktivität geschlossen.