即使没有运行,我也试图使核心蓝牙唤醒应用程序.
正如苹果所说:“由于国家保留和恢复内置于核心蓝牙,您的应用程序可以选择使用此功能,要求系统保留应用程序中央和外围管理器的状态,并继续执行某些蓝牙相关任务即使您的应用程序不再运行,当其中一个任务完成时,系统将您的应用程序重新启动到后台,并让您的应用程序恢复其状态并适当地处理该事件.
myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:@{ CBCentralManagerOptionRestoreIdentifierKey: @"myCentralManagerIdentifier" }];
但是当应用程序醒来时的回调从未触发过.
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { } -(void)centralManager:(CBCentralManager *)central willRestoreState:(NSDictionary *)state { }
这两个从来不叫.
我测试这个唤醒功能的方式:
>我在info.plist的背景模式中添加“bluetooth central”,所以BLE在后台运行.
>在我的iphone 1中启动centralManager.开始扫描.
>回家,出门,玩一些记忆沉重的游戏,在调试日志中我会看到:
“由于内存压力而终止,进程完成退出代码0”.这是为了模拟ios系统由于内存压力而终止后台应用程序.
>用另一个iphone 2开始一个信标,开始广播.
>结果:这些重新启动的回调永远不会被调用.
任何想法为什么这不工作?如果这是一个API问题,当您的手机接近BLE信标时,是否还有其他方法可以将您的应用重新启动到BLE的背景中?我尝试使用ibeacon来唤醒应用程序,但核心蓝牙中央管理器将不允许您在后台连接到ibeacon.
谢谢!
解决方法
CoreBluetooth状态恢复仅适用于连接和外围事件.目前不支持扫描.