Core Bluetooth Peripheral отключается каждые 30 секунд

У меня есть приложение, которое действует как периферийное устройство Bluetooth LE. У меня есть один сервис с четырьмя характеристиками. 2 из 4 только для чтения и записи, остальные два настроены как уведомления.

Если я подпишусь на одну из характеристик «уведомления», приложение не отключится, пока я не сделаю это вручную, работает хорошо.

Моя проблема заключается в том, что если я читаю или записываю другие характеристики, а затем неактивен в течение примерно 30 секунд, соединение BTLE отключается от периферийного устройства. Это может быть ограничение, установленное Apple, не уверен.

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


person Mark Manickaraj    schedule 28.01.2015    source источник
comment
Это может быть функция на другом устройстве, которая отключит ваш iDevice, если вы не подписались на характеристику. Позволяя в этом случае удалить паразитные возможности BLE-устройства.   -  person Larme    schedule 29.01.2015


Ответы (2)


Это побочный продукт спецификаций BLE 4.0. Bluetooth Low Energy специально разработан для того, чтобы не поддерживать соединение в течение длительного времени, как вы описываете.

Единственный способ обойти это (помимо подписки на характеристику, которую вы обнаружили) — изменить реализацию стека BLE на периферийном устройстве, к которому вы подключаетесь, и удалить или увеличить интервал подключения до точки, которую вы считаете удовлетворительной.

Хотя это также может не помочь вам, поскольку обе стороны BLE-коммуникации согласовывают эти значения, и iOS может установить максимальное значение ниже запрошенного вами порога.

person Robert Haworth    schedule 20.04.2015
comment
Что делать, если у вас есть только одна характеристика свойства NOTIFY=NO? Возможно ли это или максимальная длина соединения составляет 30 секунд? - person royherma; 02.07.2018
comment
Я не уверен, что это по-прежнему ожидаемая реализация с последними версиями CoreBluetooth, но без функции уведомления у iOS нет причин поддерживать это соединение Bluetooth после стандартного тайм-аута. - person Robert Haworth; 03.07.2018

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

Симптом: обратный вызов записи в делегате не работает, когда периферийное устройство BLE не написало ответ.

person Oleksii Radetskyi    schedule 29.11.2017