2015-09-18 8 views
9

Ho provato la pubblicità Bluetooth LE, ad esempio utilizzando un telefono Android come dispositivo "periferico" BLE. Avviare e interrompere una pubblicità costante una volta che funziona bene, ma se mi piacerebbe effettivamente trasmettere alcuni dati variabili avrei bisogno di avviare, fermare e riavviare la pubblicità in un ciclo e modificare sempre il pacchetto pubblicitario.La pubblicità Bluetooth LE fallisce quando viene avviata e arrestata ciclicamente

sto usando questi metodi di corso:
BluetoothLeAdvertiser.startAdvertising()
BluetoothLeAdvertiser.stopAdvertising()

Almeno su un Motorola Moto G 4G 2nd gen. (XT1072) con Android 5.0.2 il ciclo funziona solo per un po 'e poi qualcosa va storto nello stack Bluetooth e una nuova pubblicità non può più essere avviata. Quando si esegue il ciclo rapidamente, ciò avviene rapidamente e se si sta eseguendo lentamente occorre più tempo in modo che possa essere correlato a un riempimento del buffer.

La mia domanda è: Questo succede anche su altri dispositivi oltre a Motorola?

(e qualsiasi altro relativi commenti sono ovviamente i benvenuti.)

Teoricamente potrebbe essere dipendente da qualche produttore implementazione specifica HAL ecc quindi mi piacerebbe sapere se devo appena ottenere un altro dispositivo per essere in grado lavorare su questo come qualsiasi correzione da parte di Google/Motorola richiederebbe certo del tempo.

Questa applicazione di prova. può essere utilizzato per provare questo fuori:

https://bitbucket.org/MarkusKauppinen/bleadvertisertest

Se tutto va bene che ti terrà felicemente pubblicità per sempre e se questo problema riproduce, mostrerà una finestra all'interno di un paio di minuti o giù di lì. Se il tuo dispositivo non supporta la pubblicità Bluetooth LE o BLE, si bloccherà. (È solo un'app di prova rapida e sporca.)

Un altro modo semplice per riprodurre ciò è eseguire l'app "bluetoothadvertiser" da https://github.com/devunwired/accessory-samples e continuare a toccare rapidamente il pulsante "Aggiorna annuncio" nell'interfaccia utente per un mentre.

Dettagli aggiuntivi:

Il Bluetooth LE supporto della modalità periferica (necessaria per la pubblicità) è stato aggiunto in Lollipop e non è disponibile in 4.x. Solo alcuni dispositivi hanno il supporto della modalità periferica. La compatibilità è coperto almeno in:

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

Per esempio questi dispositivi dovrebbero avere il sostegno: Motorola Moto E 4G (2015), Motorola Moto G 4G (. 2nd Gen), 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.

Per quanto riguarda i "dati sporchi" Posso sempre vedere un "GKI_Exception" in LogCat prima che questo accada:

GKI_exception(): 65524 getbuf: su tamponi

Subito dopo la prima "GKI_Exception" l'annuncio fallisce con AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR. La linea...

E/BtGatt.btif? ### ASSERT: external/bluetooth/bluedroid/main /../ btif/src/btif_gatt_client.c line 803 Trasferimento contesto fallito! (3) ###

... è probabilmente rilevante ma non ho familiarità con BlueDroid. Detta asserzione è qui:

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

Alcuni problemi possibilmente correlati:
https://code.google.com/p/android/issues/detail?id=65455 < - ho aggiunto alcuni commenti e file di registro a questo.
https://code.google.com/p/android-developer-preview/issues/detail?id=1753
Scanning large number of BLE Tags
Bluetooth Crash on Samsung S4

+1

Sto riscontrando problemi simili con il Moto G XT1032 con 5.1 e il Moto G XT1063 con 5.0.2. Sto tentando di scansionare -> connetti -> leggi caratteristiche -> disconnetti -> scansiona ancora ma fallirà quando riavvii la scansione. Sei riuscito a trovare una soluzione per questo? –

+0

Purtroppo nessuna soluzione trovata. –

risposta

2

Ho testato la vostra applicazione su una Moto G 2nd Generation ed eseguire nello stesso problema.

L'ho provato su un tablet Nexus 9 con Android 6.0, non riesco a riprodurre l'errore e sembra funzionare. Anche su un giocatore nexus con Android 5.1.1 sembra funzionare senza problemi. Quindi o è davvero un problema del Moto G o - quello che penso sia più probabile - un bug di Android 5.0.2 che è stato risolto nelle versioni successive.