RxAndroidBle: проблема со связыванием и тайм-аутом JustWorks - PullRequest
0 голосов
/ 20 ноября 2018

Я имею дело с характеристиками, которые требуют шифрования, поэтому Android автоматически создаст связь для выполнения операций записи / чтения.

Существует вероятность, что ОС автоматически создаст связь.,Обычно это происходит, когда запрос на чтение / запись отправляется характеристике, которая требует шифрования.( ссылка здесь)

Однако первая операция чтения / записи завершится неудачно с таймаутом (по умолчанию в библиотеке 30 секунд), но если я сразу же повторю операциюпосле того, как это работает, потому что связь была создана.

Я знаю, что первая операция чтения / записи всегда будет неудачной из-за связывания, поэтому я хочу выполнить ее как можно быстрее, а не ждать 30 секунд, чтобы она провалилась.Чтобы сделать это, я установил тайм-аут на 10 секунд для всего соединения, например:

scaleDevice.establishConnection(false, new Timeout(10, TimeUnit.SECONDS))

Однако я хотел бы иметь возможность изменить операциюТайм-аут после установления соединения, поэтому я могу сделать следующее:

  1. Установить соединение с тайм-аутом работы по умолчанию 30 секунд.
  2. Перед тем, как мне понадобится чтение / запись в первый раздля зашифрованной характеристики я хочу установить для тайм-аута небольшое значение (возможно, 5 секунд).
  3. Первая операция чтения / записи зашифрованной характеристики завершится неудачей через 5 секунд.
  4. IПовторим операцию, и теперь она будет выполнена успешно.
  5. Я хочу установить тайм-аут операции на 30 с.

Возможно ли это в текущей версии библиотеки RxAndroidBle

1 Ответ

0 голосов
/ 22 ноября 2018

Я проверил исходный код библиотеки и понял, что изменение времени ожидания после установления соединения невозможно в текущей версии библиотеки.

Я открыл проблему , предлагающую добавить этофункциональность в будущем.

Что касается проблем со связыванием и зашифрованными характеристиками, я нашел лучший обходной путь.Вместо того, чтобы ждать автоматического соединения после первой неудачной операции, я проверяю связь перед установлением соединения. Я добился этого, вызвав метод bondWithDevice, доступный в этом вспомогательном классе , например:

BondingHelper.bondWithDevice(this, scaleDevice, 30, TimeUnit.SECONDS)
                    .andThen(scaleDevice.establishConnection(false))
                    .observeOn(AndroidSchedulers.mainThread())
                    .doFinally(this::disposeConnection)
                    .subscribe(this::connectionEstablished, this::throwException);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...