Androids BLE Service Discovery (Bluetooth Gatt # discoverServices ()) und Niedrigenergie vs BR / EDR

9

TLDR: Wird erwartet, dass Service Discovery-Ergebnisse über discoverServices() unterscheidet sich basierend auf dem zugrunde liegenden Transport (LE vs. BR / EDR)?

Ich habe ein Bluetooth-Zubehör im gemischten Modus, das verschiedene Funktionen als Bluetooth Classic-Gerät und als Bluetooth LE-Peripheriegerät bietet.

Android hat Probleme, die Bluetooth LE GATT-Dienste des Zubehörs zu finden, es sei denn, Sie verwenden das versteckte peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE) API, mit der Sie die Verwendung von TRANSPORT_LE oder TRANSPORT_BREDR erzwingen können.

Wenn ich das Gerät über peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback) und dann discoverServices() genannt Ich würde nur die generischen Dienst-UUIDs entdecken (und erst nach vielen fehlgeschlagenen Verbindungsversuchen mit mysteriösem Status 133, die an onConnectionStateChange ).

  • "00001800-0000-1000-8000-00805f9b34fb" (generischer Zugriff)
  • "00001801-0000-1000-8000-00805f9b34fb" (generisches Attribut).

Allerdings, wenn ich die versteckte peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE) und dann discoverServices() genannt. Ich bekomme die volle erwartete Service Discovery-Antwort:

  • "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" (Mein benutzerdefinierter Dienst)
  • "00001800-0000-1000-8000-00805f9b34fb" (generischer Zugriff)
  • "00001801-0000-1000-8000-00805f9b34fb" (generisches Attribut).

Ist das erwartete Android-Framework-Verhalten (Doubt it, also versteckte API)? Ist es schlecht, ein Peripheriegerät mit dieser "Mixed-Mode" -Operation zu entwickeln?

    
dbro 04.06.2015, 21:28
quelle

1 Antwort

3

Das

BluetoothDevice.connectGatt(Context context, boolean autoConnect, android.bluetooth.BluetoothGattCallback callback, int transport)

Die

-Methode ist seit API 23 öffentlich und scheint daher der sanktionierte Weg zu sein, das oben beschriebene Problem zu vermeiden.

Die Methode scheint für AOSP in der android-5.0.0_r1 Version eingeführt worden zu sein und war in Jede Veröffentlichung, die dazu geführt hat, wird in API 23 veröffentlicht. Daher sollte es sicher sein, über Reflektion für Geräte mit den API-Stufen 21 und 22 aufzurufen. Bei Geräten mit früheren Plattformversionen scheint das Android-Framework keine Tools zur Verfügung zu stellen, um das Problem zu mindern.

    
dbro 27.09.2016, 17:16
quelle