Я пытаюсь сделать базовое bluetooth пробудить приложение, даже если оно не работает.
Как заявила Apple: "Поскольку сохранение и восстановление состояния встроено в Core Bluetooth, ваше приложение может выбрать эту функцию, чтобы попросить систему сохранить состояние ваших центральных и периферийных менеджеров ваших приложений и продолжить выполнение определенных функций Bluetooth- связанных с ними, даже когда ваше приложение больше не работает. Когда одна из этих задач завершается, система перезагружает ваше приложение в фоновом режиме и дает вашему приложению возможность восстановить свое состояние и соответствующим образом обработать событие".
Я добавил следующий код, чтобы выбрать эту функцию:
myCentralManager =
[[CBCentralManager alloc] initWithDelegate:self queue:nil
options:@{ CBCentralManagerOptionRestoreIdentifierKey:
@"myCentralManagerIdentifier" }];
Но обратные вызовы при пробуждении приложения никогда не запускались.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
-(void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary *)state {
}
Эти два никогда не вызываются.
Как я тестирую эту функцию пробуждения:
-
Я добавляю "bluetooth central" в фоновом режиме в info.plist, поэтому BLE работает в фоновом режиме.
-
запустите centralManager в моем iphone №1. начать сканирование.
-
нажмите домой и выходите, играйте в тяжелую игру с памятью, в журнале отладки я увижу: "Завершена из-за давления памяти. Процесс завершен с кодом выхода 0". Это должно имитировать, как система ios завершает фоновое приложение из-за давления памяти.
-
запустите маяк с другим iphone №2 и начните трансляцию.
-
результат: эти вызовы callback никогда не вызываются.
Любые идеи, почему это не работает? Если это проблема API, есть ли какой-либо другой подход для возобновления вашего приложения в фоновом режиме с помощью BLE, когда ваш телефон приближается к маяку BLE? Я попытался использовать ibeacon для пробуждения приложения, но центральный диспетчер bluetooth не позволит вам подключиться к ibeacon в фоновом режиме.
Спасибо!