Как просыпаться приложение iOS с сигналом Bluetooth (BLE)

используя BLE с CoreBluetooth (нет iBeacon), есть ли способ пробудить приложение не запущенным приложением, когда устройство получает сигнал Bluetooth?

Я имитирую маяк с красным щитом BLE Shield (http://redbearlab.com/bleshield/).

Спасибо, DAN

* ОБНОВЛЕНИЕ 03/05/14 *

Похоже, что Apple представила основное обновление с iOS 7.1: теперь iOS откроет ваше приложение для вас, если оно обнаружит UUID, соответствующий вашему приложению. Приложение нужно только установить, его не нужно запускать (логика в AppDelegate должна отвечать на вызов пробуждения).

Ответы

Ответ 1

Если приложение было запущено в фоновом режиме и затем закрыто (я имею в виду, что здесь завершено - и вы больше не видите его в списке фоновых приложений при двойном нажатии кнопки "домой" ) из-за давления в памяти других приложений, тогда iOS позаботится о том, чтобы снова его разбудить при вызове делегата (при условии, что у вас есть режимы фона, перечисленные в .plist).

Если приложение было запущено в фоновом режиме, а затем закрыто пользователем (опять-таки я имею в виду здесь завершение. Таким образом, пользователь дважды щелкнул, чтобы получить список приложений, работающих в фоновом режиме, а затем нажал на ваше приложение в фоновом списке, пока он пошатнулся, а затем нажал "x" рядом с приложением, чтобы его убить), то это явное указание на то, что пользователь не хочет, чтобы приложение работало в фоновом режиме, и приложение не будет перезапущено. Пользователь должен перезапустить приложение для своих делегатов, чтобы снова начать работать в фоновом режиме (новый в iOS7).

Обновление: Я не уверен, что это в документации, но это в видеоролике CoreBluetooth WWDC 2013. Я рекомендую вам посмотреть его. Они потратили большую часть видео на то, как CoreBluetooth ведет себя в фоновом режиме.

Ответ 2

Из того, что я понимаю, если ваше приложение ранее не подключалось к периферийному устройству BLE, то нет.

Если ваше приложение ранее подключалось к периферийному устройству BLE, используйте:

-connectPeripheral: опции

Запросы на подключение не выходят за пределы времени. Лучшее место для вызова этого метода - когда ваше приложение теряет связь с периферийным устройством BLE. Вы получите уведомление, когда вы потеряете соединение с периферией в протоколе CBCentralManagerDelegate:

-centralManager: didDisconnectPeripheral: ошибка

Итак, в следующий раз, когда ваше приложение входит в диапазон периферийного устройства BLE, оно вызовет этот метод. Также обратите внимание, что при инициализации CBCentralManager вам необходимо настроить сохранение и восстановление состояния.

Ответ 3

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

система пробуждает ваше приложение, когда любой из методов делегата CBCentralManagerDelegate или CBPeripheralDelegate вызывается, позволяя вашему приложению обрабатывать важные центральные события роли, например, когда соединение установлено или снесено, когда периферийное отправляет обновленные значения признаков, а когда центральный менеджеры меняют изменения.

Для выполнения определенных задач периферийной роли в фоновом режиме должен включать ключ UIBackgroundModes с периферийным устройством bluetooth значение в вашем файле Info.plist. Когда эта пара ключей и значений включенный в файл Info.plist приложений, система пробуждает ваше приложение в события чтения, записи и подписки.

Ответ 4

Вы можете попытаться объявить voip в info.plist. В настоящее время мое приложение автоматически перезаписывается через некоторое время, даже пользователь завершает его.