即使它没有运行,我也试图让核心蓝牙唤醒应用程序.
正如Apple所说,"因为状态保存和恢复是内置于Core 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 { }
这两个从未被称为.
我正在测试这个唤醒功能的方式:
我在info.plist中的后台模式中添加了"bluetooth central",因此BLE在后台运行.
在我的iphone No.1中启动centralManager.开始扫描.
按下主页然后退出,玩一些内存沉重的游戏,在调试日志中我会看到:"因内存压力而终止.进程已完成退出代码0".这是为了模拟ios系统如何因内存压力而终止后台应用程序.
与另一部iphone No.2开始一个灯塔并开始广播.
结果:那些重新启动的回调永远不会被调用.
任何想法为什么这不起作用?如果这是一个API问题,当你的手机接近BLE信标时,还有其他方法可以将你的应用重新启动到BLE的后台吗?我已经尝试使用ibeacon唤醒应用程序,但核心蓝牙中央管理器将不允许您在后台连接到ibeacon.
谢谢!