2013-08-22 24 views
7

Przy użyciu obu systemów Android 4.3/Samsung BLE 2.0 SDK zaobserwowano, że po wyłączeniu urządzenia peryferyjnego SDK otrzyma onConnectionStateChange (DEVICE_DISCONNECTED) natychmiast lub po upływie około 20 sekund. Z mojego doświadczenia wynika, że ​​zależy to od implementacji peryferii, niektórzy z nich spróbują zgłosić, że są wyłączeni, a niektórzy po prostu nie, więc SDK musi czekać na czas około 20 sekund.Wyłączanie urządzeń peryferyjnych powodujących nieoczekiwane zachowanie.

Aby usunąć to zachowanie, próbowałem użyć zegara, aby sprawdzić, czy mogę odczytać określoną charakterystykę. Jeśli upłynie limit czasu, zadzwonię rozłącz (Android 4.3)/cancelConnection (Samsung), aby zakończyć połączenie. Samo wywołanie się powiedzie, a wywołanie zwrotne onConnectionStateChange zwraca status GATT_SUCCESS. Następnie włączam urządzenie peryferyjne i łączę się z nim natychmiast, wykrywam usługi i napotykam problem, gdy próbuję odczytać/zapisać/powiadomić każde powiadomienie. Używając LightBlue w iOS mogę potwierdzić, że urządzenie peryferyjne nie jest podłączone.

Po dokładnie 20 sekundach od wyłączenia urządzenia peryferyjnego, otrzymam wywołanie zwrotne DEVICE_DISCONNECTED. Łączę się ponownie, a wszystko działa dobrze.

Istnieją dwa pytania: 1. Czy mamy podłączyć się do urządzenia peryferyjnego podczas opóźnienia wynoszącego 20 sekund? 2. Czy istnieje sposób uzyskania powiadomienia, gdy urządzenie peryferyjne jest wyłączone?

Z góry dziękuję.

Odpowiedz

1
  1. Czy mamy połączyć się z urządzeniem peryferyjnym podczas opóźnienia wynoszącego 20 sekund? No Wygląda na to, ze ty doprowadzić się, że system operacyjny wykonuje pewne czynności w telefonie do sterowania DEVICE_CONNECTED lub DEVICE_DISCONNECTED wydarzenia, może to wynikać z kilku powodów, takich jak architektura urządzenia, ze względów bezpieczeństwa lub callback się opóźnia, aby oszczędzać energię

  2. Czy istnieje sposób uzyskania powiadomienia, gdy urządzenie peryferyjne jest wyłączone? Nie, nie sądzę, zdarzenie odebrane dla każdej akcji jest transmitowane, więc oczekuje na sygnał z samego urządzenia, ale nie otrzymuje go, jedyne co możesz tutaj zrobić, to wysłać je przez inną transmisję (lub HTTP żądanie) z drugiego końca urządzenia, aby go uzyskać.

+0

Czy możesz nieco bardziej szczegółowo opisać, co dzieje się w czasie opóźnienia wynoszącego 20 lat. Wydaje się nielogiczne, że mogę wywołać rozłączenie w danym okresie bez otrzymywania błędu. – reTs

Powiązane problemy