2013-08-22 9 views
7

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.

Antwort

1
  1. Sollen wir verzögern zu dem peripheren während der 20er Jahre verbinden? Nein, es scheint, von Ihnen selbst zur Folge hat, dass OS einige Aktionen innerhalb des Telefons DEVICE_CONNECTED oder DEVICE_DISCONNECTED Ereignisse zu steuern tun, Dies kann aus verschiedenen Gründen wie Gerätearchitektur, aus Sicherheitsgründen oder selbst Rückruf wird Energie

  2. speichern verzögert

    Gibt es eine Möglichkeit, benachrichtigt zu werden, wenn ein Peripheriegerät ausgeschaltet ist? Nein, ich denke nicht, das Ereignis, das für irgendeine Aktion empfangen wird, wird gesendet, so dass es auf ein Signal vom Gerät wartet, aber es wird nicht eins, das einzige, was Sie hier tun können, ist es über eine andere Sendung zu senden (oder HTTP Anfrage) vom anderen Ende des Geräts, um es zu erreichen

+0

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

Verwandte Themen