我试图让核心蓝牙唤醒应用程序,即使它没有运行。
正如 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 的后台模式中添加了“蓝牙中央”,因此 BLE 在后台运行。
在我的 iphone 1 中启动 centralManager。开始扫描。
按回家然后出去,玩一些内存重的游戏,在调试日志中我会看到:“由于内存压力而终止。进程以退出代码 0 完成”。这是为了模拟ios系统如何因内存压力而终止后台应用程序。
用另一个 iphone No.2 启动一个信标并开始广播。
结果:那些重新启动的回调永远不会被调用。
任何想法为什么这不起作用?如果是 API 问题,当您的手机接近 BLE 信标时,是否有任何其他方法可以使用 BLE 将您的应用重新启动到后台?我尝试过使用 ibeacon 来唤醒应用程序,但核心蓝牙中央管理器不允许您在后台连接到 ibeacon。
谢谢!