Быстрое (1 с) двойное характеристическое уведомление на Android не будет отключаться от периферийного устройства - PullRequest
0 голосов
/ 06 сентября 2018

Мы работаем над пользовательским периферийным гаджетом BLE и пишем приложение для Android для взаимодействия с ним. Мы обнаружили режим сбоя, который мы никак не можем понять.

Периферийное устройство имеет ряд характеристик, некоторые из них помечены как PROPERTY_INDICATE.

Обычно приложение прекрасно работает. В частности, когда мы выдаем gatt.disconnect(), а затем gatt.close(), устройство распознает отключение и возвращается в рекламный режим.

Существует режим, в который периферийное устройство может войти, хотя оно транслирует изменения на 2 характеристики с PROPERTY_INDICATE каждую секунду. Когда периферийное устройство находится в этом режиме, и мы отключаемся, устройство никогда не получает отключение. Каким-то образом устройство Android (Samsung Tab2 или Samsung S9) остается подключенным. Мы знаем, что он подключен, потому что до тех пор, пока мы не отключим контроллер, устройство не обнаружит разъединение. НО, если вы запрашиваете BluetoothManager.getConnectedDevices (), он показывает 0.

Мы сделали несколько итераций, чтобы попытаться триангулировать причину:

  • Уменьшить количество признаков -> НЕТ ИЗМЕНЕНИЯ
  • Уменьшить частоту обновления каждые 2 секунды -> УСПЕХ
  • Измените одну из характеристик, чтобы использовать NOTIFY -> УСПЕХ
  • Чередуйте изменения так, чтобы мы изменили оба, но на 0,5 секунды не в фазе друг с другом, чтобы они не были в одно и то же время -> NO CHANGE

Кто-нибудь может подсказать, в чем может быть проблема? Или как приблизиться к происходящему?

Быстрое решение для нас - третье изменение. Для этого сценария NOTIFY vs INDICATE это не так важно. Но меня беспокоит необходимость такого рода изменений, не понимая почему.

У нас есть вариант приложения для iOS, который не имеет ни одной из этих проблем. Соединение с iOS работает нормально (это означает, что оно отключается правильно) с двумя указаниями, происходящими каждую секунду.

1 Ответ

0 голосов
/ 07 сентября 2018

После портирования приложения на использование SweetBlue (коммерческое предложение, которое меня на самом деле впечатлило), это поведение сохранилось. Мы будем модифицировать наше периферийное устройство для экономного использования PROPERTY_INDICATION, предпочитая PROPERTY_NOTIFY для любых случаев, когда дополнительное подтверждение, предоставляемое INDICATE, не критично.

В конце дня мой ответ на вынос (пока кто-нибудь не появится с лучшим):

Android и PROPERTY_INDICATE плохо смешиваются / масштабируются. Разработчик Осторожно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...