Ricordo di aver letto nel "Guide and Hint" -doc al Samsung BLE API (archived page):L'implementazione nativa di Android BLE è di natura sincrona?
Uno dei concetti più importanti del Samsung F/W e la pila è sua natura sincrona. Cioè, se chiamiamo per esempio,
writeCharacteristic
per una caratteristica particolare, se restituiscetrue
, la chiamata successiva a qualsiasiBluetoothGatt
oBluetoothGattServer
metodo dovrebbe essere fatto dopo la richiamataonCharacteristicRead
è ricevuto. Questo perché lo stack è stato progettato per sostenere e processo di una sola GATT chiamata alla volta, e se, ad esempio, si chiamawriteCharacteristic
oreadCharacteristic
su qualsiasi caratteristica presto dopo la prima, viene ignorato.
- non che si applicano anche alla realizzazione di Nativ BLE introdotto in Android 4.3?
- Samsung API supporta anche solo un dispositivo GATT connesso alla volta. È cambiato nell'API nativa?
C'è un filo continuo legati alla natura sincrona delle API di Google sulle issue tracker: https://code.google.com/p/android/issues/detail?id=58381 –
Ho appena implementato un coda per tutte le scritture e questo sembra funzionare bene finora. –
@Ash Secondo i documenti forniti da SAMSUNG, il comportamento non è limitato alle operazioni di scrittura. Sì, usare una coda è un modo comune per risolvere questo problema. 'funziona bene finora': è difficile testare e riprodurre l'annullamento di un comando da parte di un altro. Spesso si incontrano problemi una volta che il codice BLE diventa più complesso, perché si fanno più cose in base alle chiamate precedenti.Faccio solo la prossima operazione BLE dopo quella prima della fine (risposta ricevuta) o dopo quella che non è terminata in un tempo appropriato. A proposito, i tuoi commenti si adatterebbero meglio come risposta a questa domanda. – OneWorld