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.

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

Любая помощь приветствуется!

заранее спасибо

0 ответов

Другие вопросы по тегам