如何触发核心蓝牙状态保存和恢复
状态保存和恢复由于状态保存和恢复是内置于蓝牙核心,您的应用程序可以select使用此function,要求系统保存您的应用程序的中央和外围pipe理人员的状态,并继续执行某些与蓝牙有关的任务即使您的应用程序不再运行,也是如此。 当这些任务中的一个完成时,系统会将您的应用程序重新启动到后台,并为您的应用程序提供恢复其状态并适当处理事件的机会。 在上述家庭安全应用的情况下,系统将监控连接请求,并且当用户返回家庭并且连接请求完成时,重新启动应用以处理centralManager:didConnectPeripheral:委托callback。
我怎样才能触发这个testing代码?
我有一个服务配件。 我有一个应用程序,扫描服务,我select了保存状态。 但我不知道如何进行逻辑testing,因为我不知道我需要触发它。 这些是我尝试失败的选项:
A - kill the app from Xcode B - kill the app manually C - power off the phone D - something else
在所有这些选项中,我尝试去Xcode – >设备 ,看看日志,但没有看到任何状态恢复日志。
谢谢
NB感谢用户1785784分享苹果的QA1962 – 蓝牙状态恢复的条件将重新启动一个应用程序 ,描述了iOS 11的新的蓝牙行为。这个文件应该被认为是这个问题的答案,但我认为它错误地声称iOS 10 将重新启动一个已经强制退出的应用程序。 (我还没有在iOS 10设备上testing过,但是本来应该是从iOS 9开始的。谁能确认?)。
从任务切换器手动杀死应用程序(B),确保您的应用程序不会自动启动,直到用户明确再次打开。
C也不工作,我认为只有VOIP应用程序在重新启动后自动启动,然后才能解锁设备。
我不知道D.
我用A.
首先,要实现蓝牙状态恢复,确保你已经
- 添加
bluetooth-central
作为UIBackgroundModes
到您的Info.plist - 在
CBCentralManagerOptionRestoreIdentifierKey
时设置一个CBCentralManager
- 在
CBCentralManager
委托中实现了-(void)centralManager:willRestoreState:
callback。
然后你准备好testing状态恢复:
- 让应用程序到一些已知的状态(说蓝牙开机,一些设备连接/连接)
- 杀死Xcode中的应用程序
- 观察日志或设置启动断点
- 改变蓝牙状态,例如通过
- 切换航空公司模式
- 蓝牙设备超出范围(为了避免走路,我把我的指挥/法拉第笼/咖啡壶)
- 把设备带回范围
- 与设备交互,例如通过按下button/具有脉冲
- 看你的状态恢复代码被调用
注意 : application:didFinishLaunchingWithOptions:
将被首先调用,并且您必须立即按照上面的描述初始化您的CBCentralManager
。 然后 centralManager:willRestoreState:
将被调用。
刚刚在苹果技术公司的帮助下发现了这个问题。 还给出/有一个不错的链接,显示不同的方式来导致应用程序重新启动,而无需用户干预。
我通过下面的代码片段让应用突然崩溃了。 这导致应用程序重新启动,并调用“willRestoreState”callback。
DispatchQueue.main.asyncAfter(deadline: .now() + 5) { print("Killing app") // CRASH if ([0][1] == 1){ exit(0) } exit(1) }