无法在iOS上触发BLE的状态恢复代码

whe*_*kie 14 ios bluetooth-lowenergy ble-state-preservation

我试图让我的应用程序响应重新启动到后台是对发现广告外围设备的响应.

以下代码目前在我的应用程序中工作(在前景+背景中,即使经过几个小时的后台运行):

[self.centralManager scanForPeripheralsWithServices:self.services options:nil];
Run Code Online (Sandbox Code Playgroud)

通常,我的应用程序没有任何挂起的连接请求,因为我想在后台扫描新的广告.以下文档让我相信这仍然是可能的:

重要的是要记住,当且仅当特定蓝牙事件或操作(如扫描,连接或订阅的通知特征)等待应用时,才会重新启动和恢复该应用,并且此事件已发生.(来自https://developer.apple.com/library/content/qa/qa1962/_index.html)

系统会跟踪...中央管理器正在扫描的服务(以及扫描开始时指定的任何扫描选项)(来自https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts /CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html)

履行

我通过执行以下操作,按照"添加对状态保存和恢复的支持"部分中的最后一个链接^中概述的步骤进行操作:

  1. 按照指示实例化中央经理:

    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:@ {CBCentralManagerOptionRestoreIdentifierKey:@"myCentralManagerIdentifier"}];

  2. 重新实例化您的中央和外围经理

在这里,我实际上没有做任何其他事情,因为didFinishLaunchingWithOptions被调用并且中心将使用相同的标识符重新初始化.(我在这里还有别的东西要做吗?)

  1. 实现恢复功能:

    (void)centralManager:(CBCentralManager*)central willRestoreState:(NSDictionary*)state {//设置断点但从未到达... NSLog(@"..."); }

我如何测试状态保存/恢复

我在恢复功能中设置了断点(从步骤3开始)并插入了一个断点NSLog.

通过单击"停止",如" 如何触发核心蓝牙状态保存和恢复 "中的建议,我希望我可以通过广告与我的外设广告来触发代码,正如我通常所做的那样(此发现/连接流程在应用程序时工作正常正在后台运行).但是我无法说出真正的事情.

我的一般问题是:为什么不触发断点/ NSLogs不打印?是否有调试恢复功能的首选方法?

最后,作为一个完整性检查,我是否正确地阅读了文档,发现广告外围设备应该触发重新启动应用程序到应用程序处理的后台?