Bluetooth-Profile

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 Klasse BluetoothHeadset 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:

  1. Rufen Sie den Standardadapter ab, wie unter Bluetooth-Einrichtung beschrieben.
  2. Richten Sie eine BluetoothProfile.ServiceListener ein. Dieser Listener benachrichtigt BluetoothProfile-Clients, wenn sie mit dem Dienst verbunden oder getrennt wurden.
  3. 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 von BluetoothHeadset.
  4. Rufen Sie in onServiceConnected() einen Handle zum Profil-Proxyobjekt ab.
  5. 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:

  1. Rufen Sie einen Verweis zum Proxy-Objekt BluetoothHealth ab. Wie bei normalen Headset- und A2DP-Profilgeräten müssen Sie getProfileProxy() mit dem Profiltyp BluetoothProfile.ServiceListener und dem Profiltyp HEALTH aufrufen, um eine Verbindung zum Profil-Proxyobjekt herzustellen.

  2. Erstellen Sie einen BluetoothHealthCallback und registrieren Sie eine Anwendungskonfiguration (BluetoothHealthAppConfiguration), die als Senke dient.

  3. Verbindung zu einem Gerät mit Gesundheitsfunktionen herstellen.

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

  5. Schließen Sie danach den Statuskanal und heben Sie die Registrierung der App auf. Der Kanal wird auch bei längerer Inaktivität geschlossen.