Mit Android 4.3/Samsung BLE 2.0 SDK wird festgestellt, dass das SDK onConnectionStateChange (DEVICE_DISCONNECTED) entweder sofort oder nach einer Verzögerung von 20s erhält, wenn ein Peripheriegerät ausgeschaltet wird. Aus meiner Erfahrung hängt das von der peripheren Implementierung ab, einige von ihnen werden versuchen zu berichten, dass sie ausgeschaltet sind und andere tun es einfach nicht, also muss das SDK auf ~ 20s für die Zeitüberschreitung warten.Deaktivieren von Peripheriegeräten, die zu unerwartetem Verhalten führen
Um dieses Verhalten zu entfernen, habe ich versucht, einen Timer zu verwenden, um zu überprüfen, ob ich ein bestimmtes Merkmal lesen kann. Wenn die Lesezeit abgelaufen ist, werde ich die Verbindung trennen (Android 4.3)/cancelConnection (Samsung) um die Verbindung zu beenden. Der Aufruf selbst ist erfolgreich und der onConnectionStateChange-Callback gibt einen Status GATT_SUCCESS zurück. Dann habe ich das Peripheriegerät eingeschaltet und sofort eine Verbindung hergestellt, die Dienste entdeckt und ein Problem festgestellt, als ich versucht habe, eine Benachrichtigung zu lesen/schreiben/zu benachrichtigen. Mit LightBlue in iOS kann ich bestätigen, dass das Peripheriegerät nicht angeschlossen ist.
Nach genau 20s vom Ausschalten der Peripherie, ich werde einen DEVICE_DISCONNECTED Rückruf erhalten. Ich verbinde mich danach wieder, und alles funktioniert gut.
Es gibt zwei Fragen: 1. Sollen wir während der 20s Verzögerung eine Verbindung zum Peripheriegerät herstellen? 2. Gibt es eine Möglichkeit, benachrichtigt zu werden, wenn ein Peripheriegerät ausgeschaltet ist?
Vielen Dank im Voraus.
Können Sie ein wenig mehr auf das, was während der 20s Verzögerung vor sich geht. Es scheint nicht logisch, dass ich die Verbindung während des Zeitraums ohne Fehler aufrufen kann. – reTs