RxAndroidBle несколько подключений

Фон:

Я использую библиотеку RxAndroidBle и мне необходимо быстро (насколько это возможно) подключаться к нескольким устройствам одновременно. время и начать общение. Я использовал RxBluetoothKit для iOS и начал использовать RxAndroidBle на своем Pixel 2. Это работало как ожидалось, и я мог установить соединения с 6-8 устройствами по мере необходимости за несколько сотен миллисекунд. Однако, расширив мое тестирование на такие телефоны, как Samsung S8 и Nexus 6P, кажется, что установление одного соединения теперь может занимать более 5-6 секунд вместо 50-60 миллисекунд. На данный момент я предполагаю, что это несоответствие связано с реализациями BT для конкретных поставщиков. В конечном итоге это означает, что подключение, например, к 5 устройствам теперь занимает 30 секунд вместо ‹ 1 секунды.

Вопрос:

Насколько я понимаю из документации и других заданных вопросов, RxAndroidBle ставит в очередь все запросы на сканирование, подключение и связь и выполняет их последовательно, чтобы обеспечить безопасность и стабильность на основе различных реализаций Bluetooth в экосистеме Android. Тем не менее, есть ли в настоящее время способ выполнять запросы (а именно, подключение) параллельно, чтобы принять этот риск и потенциально сократить мое общее время для установления нескольких подключений до того устройства, которое требует больше всего времени для подключения?

И побочный вопрос: есть ли какие-нибудь идеи по диагностике того, что может занять 5 секунд, чтобы установить соединение с устройством? Или нам просто нужно смириться с тем, что некоторым телефонам в некоторых случаях потребуется так много времени?


person mitchctodd    schedule 10.10.2018    source источник


Ответы (1)


Тем не менее, есть ли в настоящее время способ выполнять запросы (а именно, подключение) параллельно, чтобы принять этот риск и потенциально сократить мое общее время для установления нескольких подключений до того устройства, которое требует больше всего времени для подключения?

Да. Вы можете попытаться установить соединения, используя autoConnect=true, что предотвратит блокировку очереди более чем на несколько миллисекунд. Последнее соединение должно быть запущено с помощью autoConnect=false, чтобы начать сканирование. Некоторые реализации стека справляются с этим вполне нормально, но ваш пробег может отличаться.

И побочный вопрос: есть ли какие-нибудь идеи по диагностике того, что может занять 5 секунд, чтобы установить соединение с устройством?

Вы можете проверить журнал отслеживания Bluetooth HCI. . Также вы можете попробовать использовать сниффер BLE, чтобы проверить, что на самом деле происходит «в эфире» (например, комплект разработчика nRF51).

Или нам просто нужно смириться с тем, что некоторым телефонам в некоторых случаях потребуется так много времени?

Это также вариант, поскольку обычно мало что можно сделать со временем соединения. По моему опыту, реализации стека/прошивки BLE сильно отличаются друг от друга.

person Dariusz Seweryn    schedule 11.10.2018