2015-09-18 8 views
9

Ich habe Bluetooth LE Werbung ausprobiert, d. H. Mit einem Android-Telefon als BLE- "Peripheriegerät". Das Starten und Stoppen einer konstanten Werbung funktioniert zwar gut, aber wenn ich tatsächlich einige unterschiedliche Daten übertragen möchte, müsste ich die Werbung in einem Zyklus starten, stoppen und neu starten und immer das Werbepaket ändern.Bluetooth LE Werbung schlägt fehl, wenn zyklisch gestartet und gestoppt wird

Ich verwende diese Methoden natürlich:
BluetoothLeAdvertiser.startAdvertising()
BluetoothLeAdvertiser.stopAdvertising()

Mindestens auf einer Motorola Moto G 4G zweite Generation. (XT1072) mit Android 5.0.2 läuft der Zyklus nur eine Weile und dann geht im Bluetooth-Stack etwas schief und eine neue Werbung kann nicht mehr gestartet werden. Wenn der Zyklus schnell ausgeführt wird, geschieht dies schnell und wenn es langsam läuft, benötigt es mehr Zeit, so dass es mit etwas Pufferfüllung zusammenhängen könnte.

Meine Frage ist: Kann dies auch auf anderen Geräten als Motorola passieren?

(und andere ähnliche Kommentare sind natürlich willkommen.)

Theoretisch könnte es auf einiger herstellerspezifische HAL Implementierung abhängig sein usw., so würde ich gerne wissen, ob ich gerade ein anderes Gerät bekommen sollte in der Lage sein, um daran zu arbeiten, da jede Reparatur von Google/Motorola einige Zeit dauern würde.

Diese Test App. es Werbung für immer und wenn dieses Problem reproduziert halten würde glücklich https://bitbucket.org/MarkusKauppinen/bleadvertisertest

Wenn alles geht gut, es wird einen Dialog innerhalb von ein paar Minuten oder so zeigt: kann dies versuchen, verwendet werden. Wenn Ihr Gerät Bluetooth LE-Werbung oder BLE überhaupt nicht unterstützt, wird es einfach abstürzen. (Es ist nur eine schnelle und unsaubere Test app.)

Eine weitere einfache Möglichkeit, dies zu reproduzieren ist die „bluetoothadvertiser“ App von https://github.com/devunwired/accessory-samples zu laufen und einfach schnell tippen halten auf dem „Update Anzeige“ auf der Benutzeroberfläche für eine während.

Weitere Details:

Der Bluetooth LE Peripherie Modus Unterstützung (für die Werbung erforderlich) wurde in Lollipop aufgenommen und ist nicht verfügbar in 4.x. Nur bestimmte Geräte unterstützen den Peripheriemodus. Die Kompatibilität wird zumindest abgedeckt:

https://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html Chipsets/Devices supporting Android 5 BLE peripheral mode chipsets supporting BLE peripheral role on Android 5

Zum Beispiel diese Geräte sollte die Unterstützung haben: Motorola Moto E 4G (2015), Motorola Moto G 4G (. 2. Generation), Sony Xperia M4 Aqua, ZTE Blade S6, Motorola Moto X (2014), Samsung Galaxy S6, Google Nexus 6, Google Nexus 9, HTC One M9, Samsung Galaxy S6 Edge.

Was die "schmutzigen Details" Ich kann immer eine "GKI_Exception" in LogCat sehen, bevor dies geschieht:

GKI_exception(): 65524 Getbuf: aus Puffern

Bald nach dem erste "GKI_Exception" schlägt die Werbung mit AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR fehl. Die Linie...

E/BtGatt.btif? ### ASSERT: extern/bluetooth/bluedroid/main /../ btif/src/btif_gatt_client.c Zeile 803 Kontextübertragung fehlgeschlagen! (3) ###

... ist wahrscheinlich relevant, aber ich bin nicht vertraut mit BlueDroid. Das sagte assert ist hier:

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.0.2_r1/btif/src/btif_gatt_client.c#803

Einige möglicherweise damit verbundenen Probleme:
https://code.google.com/p/android/issues/detail?id=65455 < - ich einige Kommentare hinzugefügt und die Protokolldateien zu dieser.
https://code.google.com/p/android-developer-preview/issues/detail?id=1753
Scanning large number of BLE Tags
Bluetooth Crash on Samsung S4

+1

Ich stoße auf ähnliche Probleme mit dem Moto G XT1032 mit 5.1 und dem Moto G XT1063 mit 5.0.2. Ich versuche zu scannen -> verbinden -> Eigenschaften lesen -> trennen -> erneut scannen, aber es wird beim Neustart des Scans fehlschlagen. Haben Sie dafür eine Lösung gefunden? –

+0

Leider keine Lösung gefunden. –

Antwort

2

ich Ihre App auf einer Moto G 2nd Gen getestet und in das gleiche Problem laufen.

Ich versuchte es auf einem Nexus 9 Tablet mit Android 6.0, da konnte ich den Fehler nicht reproduzieren und es scheint zu funktionieren. Auch auf einem Nexus-Player mit Android 5.1.1 scheint es ohne Probleme zu laufen. Also entweder ist es wirklich ein Problem des Moto G oder - was ich denke, ist wahrscheinlicher - ein Bug von Android 5.0.2, der in späteren Versionen gelöst wurde.