didUpdateValueForCharacteristic не вызывается, когда приложение находится в приостановленном состоянии
Я разрабатываю приложение, которое в определенных сценариях должно быть подключено к периферийному устройству Bluetooth на неопределенный срок.
Прежде чем я продолжу свой вопрос, я хочу подтвердить, что:
- Я инициализирую свой
CBCoreBluetoothManager
вdidFinishLaunchingWithOptions:
, - я имею
bluetooth-central
фоновые возможности включены. - Я использую сохранение и восстановление состояния, инициализируя менеджера ключом, и
willRestoreState
: - До того, как моя проблема возникла, у меня есть успешное соединение с моим периферийным устройством, я получаю его обслуживание (я ищу только один) и его характеристики (опять же, я ищу только один), для которых я устанавливаю
setNotifyValue:
вYES
, Кроме того, в то время как и на переднем плане, и на заднем плане, я получаю обратные вызовы наdidUpdateValueForCharacteristic:
каждый раз, когда значение характеристики обновляется. - Я моделирую "приостановленное состояние" с
kill(getpid(), SIGKILL)
(Я также проверил это, просто поместив приложение в фоновом режиме и оставив на 1 час +) - Когда я говорю приостановлено, я имею в виду фактическое
Suspended
государство. Как я полагаю, каждое приложение, в конце концов, попадает туда, после того, как какое-то время находится в фоновом режиме.
Проблема, с которой я сталкиваюсь, заключается в получении обратных вызовов didUpdateValueForCharacteristic:
когда приложение приостановлено. Я снова получаю обратные вызовы, если приложение находится в фоновом режиме, но не тогда, когда оно приостановлено. Это означает, что приложение не просыпается при обновлении значения характеристики.
Самое смешное, что пока приложение находится в режиме ожидания, и я выхожу из диапазона периферийных устройств для отключения, а затем снова в диапазон для повторного подключения, приложение будет разбужено, потому что оно попытается восстановить вызывает willRestoreState:) и в течение непродолжительного времени прослушивает любые характерные значения обновлений.
Подводя итог, пока мое приложение находится в приостановленном состоянии и в пределах диапазона Периферии, didUpdateValueForCharacteristic не вызывается, то есть приложение не просыпается, я уверен на 100%, является обновлением характеристического значения. Тем не менее, оно разбудит приложение, если я выйду из зоны действия периферии и вернусь обратно, потому что я поддерживаю сохранение и восстановление состояния.
Из документации Apple:
The system wakes up your app when any of the CBCentralManagerDelegate or CBPeripheralDelegate delegate methods are invoked, allowing your app to handle important central role events, such as when a connection is established or torn down, when a peripheral sends updated characteristic values, and when a central manager’s state changes.
Кажется, я должен получать эти обновления, у кого-нибудь когда-нибудь была такая проблема?
Любая помощь приветствуется!
заранее спасибо