TLDR: Wird erwartet, dass Service Discovery Ergebnisse über discoverServices()
basierend auf dem zugrunde liegenden Transport (LE vs. BR/EDR) abweichen?Android BLE Service Discovery (Bluetooth Gatt # discoverServices()) und Low Energy 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 Mühe, die Entdeckung der Bluetooth LE GATT Dienste des Zubehörs, wenn Sie die versteckten peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE)
API verwenden, die Sie verwenden entweder TRANSPORT_LE
oder TRANSPORT_BREDR
zwingen können.
Wenn ich das Gerät über peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback)
verbunden und rief dann discoverServices()
ich nur die generischen Dienst UUID entdecken würde (und erst nach vielen Verbindungsversuche mit geheimnisvollen Status 133-onConnectionStateChange
geliefert fehlgeschlagen).
- „00001800-0000-1000-8000-00805f9b34fb“ (Generic Access)
- „00001801-0000-1000-8000-00805f9b34fb“ (Generic Attribute).
Allerdings, wenn ich die versteckte peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE)
aufrufen und dann rief discoverServices()
ich die volle erwartete Service-Discovery-Antwort erhalten:
- "XXXXXXXXXXXX-XXXXXXXX-XXXXXXXXXXXX" (My benutzerdefinierten Dienst)
- "00001800-0000-1000-8000-00805f9b34fb" (generischer Zugriff)
- "00001801-0000-1000-8000-00805f9b34fb" (generisches Attribut).
Ist das erwartete Android-Framework-Verhalten (Zweifel, also versteckte API)? Ist es schlecht, ein Peripheriegerät mit diesem "gemischten Modus" zu entwickeln?
Wenn ich mich richtig erinnere, wenn Ihr Beacon BR/EDR-Unterstützung anzeigt, verwendet Android es standardmäßig, was zu Fehlern führt. Siehe http://stackoverflow.com/a/31369286/3623345 und den entsprechenden Thread. Wenn dies WAI ist, oder wenn es zumindest einen guten Grund dafür gibt, weiß ich es nicht. –
Entschuldigung, ich habe den falschen Beitrag verlinkt. In http://stackoverflow.com/a/31148924/3623345 ist auch ein Link zu einem Google-Bug-Bericht über dieses Problem (https://code.google.com/p/android/issues/detail?id=58896) Dating zurück bis 2013 als "Neu" gelistet ... –