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ę.
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