2013-08-22 13 views
7

Utilizzando sia Android 4.3/Samsung BLE 2.0 SDK, si osserva che quando una periferica è spenta, l'SDK riceverà onConnectionStateChange (DEVICE_DISCONNECTED) immediatamente o dopo un ritardo di ~ 20s. Dalla mia esperienza dipende dall'implementazione periferica, alcuni di loro hanno provato a segnalare che sono stati disattivati ​​e altri no, quindi l'SDK deve attendere i 20 secondi per il timeout.Spegnere la periferica causando un comportamento imprevisto

Per rimuovere questo comportamento, ho provato a utilizzare un timer per verificare se riesco a leggere una determinata caratteristica. Se la lettura è scaduta, chiamerò disconnect (Android 4.3)/cancelConnection (Samsung) per terminare la connessione. La chiamata stessa ha esito positivo e il callback onConnectionStateChange restituisce uno stato GATT_SUCCESS. Poi ho acceso la periferica e mi sono collegato immediatamente, ho scoperto i servizi e ho riscontrato dei problemi quando ho provato a leggere/scrivere/notificare qualsiasi notifica. Usando LightBlue in iOS posso confermare che la periferica non è connessa.

Dopo esattamente 20 secondi dallo spegnimento della periferica, riceverò un callback DEVICE_DISCONNECTED. Mi connetto di nuovo in seguito, e tutto funziona bene.

Ci sono due domande: 1. Dovremmo connetterci alla periferica durante il ritardo di 20 secondi? 2. C'è un modo per ricevere una notifica quando una periferica è spenta?

Grazie in anticipo.

risposta

1
  1. Si suppone che ci si connetta alla periferica durante il ritardo di 20 secondi? No, sembra da te stesso risultato che OS sta facendo alcune azioni all'interno del telefono per controllare DEVICE_CONNECTED o DEVICE_DISCONNECTED eventi, questo può essere dovuto a vari motivi, come l'architettura dispositivo, motivi di sicurezza o di callback per sé è in ritardo per risparmiare energia

  2. C'è un modo per ricevere una notifica quando una periferica è spenta? No, non penso, L'evento ricevuto per qualsiasi azione viene trasmesso in modo che sia in attesa di un segnale dal dispositivo stesso ma non ne riceve uno, l'unica cosa che puoi fare qui è inviarlo tramite qualche altra trasmissione (o HTTP richiesta) dall'altra parte del dispositivo per ottenerlo

+0

Puoi approfondire un po 'di più su cosa sta succedendo durante il ritardo di 20 secondi. Non sembra logico che io possa chiamare la disconnessione durante il periodo senza ricevere errori. – reTs

Problemi correlati