iOS Corebluetooth — иногда не подключается к устройству, пока я не сделаю сброс сети

Я иногда сталкивался с проблемой, когда мое приложение не будет повторно подключаться к определенному устройству Bluetooth LE, пока я не сброслю настройки сети на своем телефоне (я предполагаю, что это очищает кеши Bluetooth). В этом состоянии он по-прежнему может нормально подключаться к другим устройствам.

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

Мне было интересно, сталкивался ли кто-нибудь с подобными проблемами при использовании Corebluetooth/CBCentralManager и нашел ли какие-либо обходные пути?

Спасибо!


person Rajusa    schedule 13.06.2013    source источник
comment
Я столкнулся с тем же самым!   -  person Erhard Dinhobl    schedule 18.05.2015


Ответы (1)


Если ваше устройство ищет только определенную услугу/характеристику, указанную в профиле GATT, это может быть проблемой. По какой-то причине Apple не указала в своей документации, что Bluetooth автоматически кэширует профиль GATT до тех пор, пока Bluetooth не будет выключен и снова включен. Поэтому, если вы меняете GATT на своем устройстве LE, а ваш телефон ищет что-то конкретное в GATT, возможно, он не сможет найти ваше устройство. К сожалению, я не верю, что есть способ очистить кеш программно, поэтому вам все равно придется вручную сбрасывать Bluetooth.

Однако, если вы не меняете профиль GATT, весь вышеприведенный абзац к вам не относится =P Что я хотел бы иметь в виду, так это то, что «ведомые устройства» Bluetooth LE (или, как их называет Apple, периферийные устройства) могут иметь только одно соединение за раз. Таким образом, ваше LE-устройство может быть непреднамеренно подключено к чему-то другому, поэтому ваше приложение не сможет его найти. Это может быть даже приложение на вашем телефоне — возможно, ваше приложение подключено, но не отображает его, или (если вы тестируете несколько приложений) к нему уже подключено другое приложение.

person Matthew Griffin    schedule 13.06.2013