我正在尝试使核心蓝牙即使应用未运行也能唤醒它。
正如苹果所述,“由于状态保存和恢复内置于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中将“蓝牙中心”添加到后台模式,以使BLE在后台运行。
在我的iPhone No.1上启动centralManager并开始扫描。
按Home键退出应用,在内存繁重的游戏中玩一会儿,在调试日志中我会看到:"因内存压力而终止。进程以退出代码0结束"。这是为了模拟iOS系统由于内存压力而终止后台应用。
在另外一个iPhone No.2上启动一个信标并开始广播。
结果:那些重新启动回调从未被调用。
有什么想法为什么这不起作用吗?如果这是API问题,是否有其他方法可以在您的手机接近BLE信标时将应用程序重新启动到后台与BLE连接?我已经尝试使用ibeacon唤醒应用程序,但核心蓝牙中央管理器不允许您在后台连接到ibeacon。
谢谢!