Основной Bluetooth и backgrounding: обнаружение устройства и запуск действия, даже после нескольких дней в фоновом режиме?


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

Как указано в видеороликах WWDC 2012 Core Bluetooth, существуют две возможности для приложений для работы в фоновом режиме при работе с Core Bluetooth:

Предыстория Событий

Фоновая обработка событий, вероятно, то, что большинство приложений будет использовать при взаимодействии с Bluetooth Низкоэнергетические устройства. Этот режим не позволяет осуществлять прямую связь с аксессуаром, когда приложение находится в фоновом режиме, но обеспечивает уведомление от аксессуар, когда он хочет общаться с приложением. iOS будет оставайтесь на связи с аксессуаром BTLE, когда ваше приложение находится в фон и будет продолжать следить за уведомлениями. Когда подключен психологии аксессуар уведомление, доступные, иос сообщим пользователь, с которым аксессуар хотел бы поговорить ваше приложение, позволяющее пользователь, который загружает ваше приложение и взаимодействует с аксессуаром. Столько приборам необходимо экономить электроэнергию, предоставляя информацию только на детерминированные времена значительно увеличат время работы от батарей аксессуар и iPhone 4S.

  • никакой информации.для этого режима требуются записи plist.

Сессия Backgrounding

Бывают моменты, когда приложение должно взаимодействовать с аксессуар, даже если он работает в фоновом режиме. Рассмотрим запуск приложения, которое должно отслеживать частоту сердечных сокращений в режиме реального времени. Есть ясный старт и стоп к этой модели. Пользователь начинает свой запуск в Апп. В то время как запуск активен, приложение считывает информацию о частоте сердечных сокращений пока запуск не будет завершен или остановлен. Сессии информацию также позволяет сканировать и подключать аксессуары BTLE в то время как приложение находится на заднем плане. A scanForPeripheralsWithServices или вызов connectPeripheral будет продолжаться, даже если приложение находится в фон. CoreBluetooth продолжит следить за конкретными периферийные устройства или периферийные устройства, соответствующие службам, которые ищет ваше приложение Для и вызовите делегата приложений, когда он найден или подключен. Не забывать, что каждый раз, когда периферийное устройство BTLE или iPhone 4S использует свое радио, это истощение соответствующих устройств доступной мощности. Разработчик приложений при использовании сеансового фонового анализа необходимо помнить об использовании энергии.

  • фоновая обработка сеанса требует ввода режима фоновой обработки к UIBackgroundModes, bluetooth-central, в ваших приложениях информация.файл plist.

До сих пор я использую Backgrounding (с соответствующей информацией.запись плиста). Приложение просит iOS восстановить все известные устройства, а затем дает команду подключиться к устройству, которое я ищу. Обратный вызов соединения происходит даже через несколько минут после того, как мое приложение было фоновым.

Но: приложение приостанавливается через, скажем, один час. Это означает, что в следующий раз, когда мое приложение будет запущено пользователем, оно не могу сказать, были ли какие-либо наблюдения интересующего устройства BLE.

Итак, мой вопрос: возможно ли, чтобы мое приложение получало уведомления без взаимодействия с пользователем даже через несколько дней после отправки в фоновый режим, когда определенное устройство BLE входит в диапазон, чтобы я мог хранить свою метку времени?

3 19

3 ответа:

Нет, iOS не гарантирует, что ваше приложение будет работать в фоновом режиме. В документах говорится:

Однако этот метод может быть вызван в ситуациях, когда приложение работает в фоновом режиме (не приостановлено), и система должна завершить его по какой-либо причине.

(документация applicationWillTerminate )

Начиная с iOS 7, Ваш вариант использования теперь легко поддерживать. До iOS 7 ваше приложение могло регистрироваться для получения уведомлений об этом периферийном устройстве, и оно просыпалось в фоновом режиме, когда система должна была доставить уведомление. Тем не менее, если система оказалась под давлением памяти во время фоновой загрузки или перезагрузки вашего приложения, оно не будет перезапущено. iOS 7 добавила восстановление состояния в CBCentralManager и CBPeripheralManager, так что теперь ОС перезапустит ваше приложение в ограниченном объеме, даже если оно не было запуск из-за любого из вышеупомянутых условий. Дополнительную информацию смотрите в руководстве CoreBluetooth guide.

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

Использовать IOS7 сохранение и восстановление состояния BLE

Если ваше приложение закрыто IOS из-за нехватки памяти(Именно поэтому ваше приложение не может работать через несколько дней), оно больше не может обрабатывать делегаты bluetooth. В этом случае, если вы использовали сохранение и восстановление состояния, ваше приложение может быть перезапущено в фоновом режиме для повторного запуска, также только на 10 секунд. только в этой ситуации, cbcentralmanager willRestoreState может быть вызванный.

Удачи.