我开发的应用程序需要在某些情况下无限期地连接到蓝牙外设。
在继续提问之前,我想确认一下:
CBCoreBluetoothManager
初始化我的didFinishLaunchingWithOptions:
。bluetooth-central
个后台功能。willRestoreState
:setNotifyValue:
设置为YES
。另外,在前景和背景中,每当特征值更新时,我都会在didUpdateValueForCharacteristic:
上收到回调。kill(getpid(), SIGKILL)
(我还通过将应用程序放在后台进行测试,让它静置1小时+)Suspended
状态。我相信每个应用程序最终会在后台运行一段时间后到达那里。我遇到的问题是,当应用暂停时,didUpdateValueForCharacteristic:
会收到回调。如果应用程序在后台,我会再次收到回调,但在暂停时则不会。意思是,应用程序不会被特征值更新唤醒。
有趣的是,当我将应用程序置于暂停模式时,我走出外围设备范围断开连接,然后回到范围内重新连接,应用程序将被唤醒,因为它会尝试恢复(它调用willRestoreState :)并在短时间内,将监听任何特征值更新。
总结一下,当我的应用程序处于挂起状态,并且在Peripheral的范围内时,didUpdateValueForCharacteristic没有被调用,这意味着应用程序没有被唤醒,我100%肯定,是一个特征值更新。然而,如果我走出外围设备的范围,然后回来,它会唤醒应用程序,因为我支持状态保存和恢复。
来自Apple的文档:
The system wakes up your app when any of the CBCentralManagerDelegate or CBPeripheralDelegate delegate methods are invoked, allowing your app to handle important central role events, such as when a connection is established or torn down, when a peripheral sends updated characteristic values, and when a central manager’s state changes.
似乎我应该收到这些更新,有没有人遇到这样的问题?
感谢任何帮助!
提前致谢