Я столкнулся с проблемой уведомлений Bluetooth.У меня есть 2 датчика, к которым я подключаюсь.Каждый из них имеет несколько сервисов, каждый сервис имеет определенные характеристики.
Я подписываюсь на одну характеристику одной из услуг.Я делаю это для обоих датчиков.Каждый датчик посылает пакеты данных длиной 12 и 13 байтов один за другим непрерывно.
Я использую одну BluetoothManager
, одну BluetoothAdapter
, две BluetoothGatt
переменные и две BluetoothGattCallback
, каждаяопределенный для каждого датчика.
Я подключаюсь к первому датчику, уведомления приходят отлично, очень быстро 12-13-12-13-12-13 ... все хорошо!После того, как я подключился ко второму датчику, начинают поступать уведомления и от второго датчика 12-13-12-13-12-13.Но уведомления от первого датчика начинают иметь проблемы - я вижу только 13 пакетов данных.Что-то вроде «датчик 1 пакет 13 - датчик 2 пакет 12 - датчик 2 пакет 13 - отправитель 1 пакет 13 - датчик 2 пакет 12 - датчик 2 пакет 13 - отправитель 1 пакет 13» ... и т. Д.
Практически, пакет данных длиной 12 больше не приходит.Приложение на iOS работает отлично, поэтому проблема не в сенсорах, а в стеке Bluetooth.
Я пробовал с https://github.com/Polidea/RxAndroidBle - у меня была эта проблема.Затем я реализовал необработанное решение из https://developer.android.com/guide/topics/connectivity/bluetooth-le - у меня была та же проблема.Затем я попробовал библиотеку из https://github.com/NordicPlayground/puck-central-android.
Они пытались каким-то образом управлять проблемой с потоками (переопределяя многие методы и пытаясь синхронизировать потоки, чтобы избежать одновременного доступа), но по сути моя проблема былане решено.Даже используя их библиотеку, я все еще сталкиваюсь с такими же проблемами (https://github.com/NordicPlayground/puck-central-android/issues/4).
Я пробовал все виды небольших взломов, начиная вручную новый поток при каждом новом уведомлении, добавляя небольшую задержку / сон в потоке. Всеэти решения зарекомендовали себя не как реальное решение.
Я прочитал много статей о stackoverflow и других источниках, связанных с этой темой, я потратил более 2 недель на эту проблему и не смог найти решение.
Кто-нибудь сталкивался с такими же проблемами, пытаясь получать очень быстрые уведомления от двух устройств (подключенных одновременно) в пакетах данных с разной длиной?