Базовое сохранение и восстановление состояния Bluetooth не работает, не могу перезапустить приложение в фоновом режиме
Я пытаюсь заставить ядро 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. начать сканирование.
нажмите home и выйдите, поиграйте в какую-нибудь тяжелую память, в журнале отладки я увижу: «Завершено из-за нехватки памяти. Процесс завершен с кодом выхода 0». Это для имитации того, как система ios завершает работу фонового приложения из-за нехватки памяти.
запустить маяк с другого iphone № 2 и начать вещание.
результат: эти повторные обратные вызовы никогда не будут вызваны.
Есть идеи, почему это не работает? Если это проблема API, есть ли другой способ перезапустить ваше приложение в фоновом режиме с BLE, когда ваш телефон приближается к маяку BLE? Я пробовал использовать ibeacon для запуска приложения, но центральный менеджер ядра Bluetooth не позволит вам подключиться к ibeacon в фоновом режиме.
Спасибо!