CoreBluetooth - centralManagers方法didDiscoverPeripheral在睡眠模式下变得最不频繁

时间:2014-05-08 20:12:36

标签: ios core-bluetooth screen-lock cbcentralmanager

我正在使用CoreBluetooth,并且当应用程序处于前台或后台或设备被锁定且设备屏幕仍处于打开状态时,会经常调用回调方法didDiscoverPeripheral。  但是一旦屏幕关闭/变黑(睡眠模式),其回叫频率就会降低到几乎为零。

可能导致这种情况的原因是什么?设备电池已满,蓝牙已开启。

请帮我解决这个问题。

感谢。

3 个答案:

答案 0 :(得分:2)

关于CoreBluetooth和后台操作,您应该注意两件事:

1。)将应用程序放入后台后,将忽略CBCentralManagerScanOptionAllowDuplicatesKey标志。如果您在前台看到外围设备,则在后台(同一扫描周期内)不会再为该外围设备进行另一次didDiscover回调。您可以通过关闭外围设备来测试此功能,并且只有在中央设备在后台停留一段时间后才能打开电源。然后你应该收到回调。

2。)另一个问题是外围设备发现的回调时间在后台时被限制。例如,如果您在前景中在1秒内发现外围设备。在后台发现相同的外围设备可能需要60秒才能完成。

答案 1 :(得分:0)

tdevoy是正确的,但是,我会给出稍微更乐观的发现时间值。根据我的经验,当一个或两个设备处于背景/暂停状态时,发现仅需1-2秒。

如果您的应用在后台时没有收到回调,那么您的代码很可能会出现轻微错误。在WWDC 2013 CoreBluetooth视频中,工程师提供有关如何实现所需行为的明确说明。一旦你能够收到回调,你就可以安排并提出一个UILocalNotification,它会产生与接收短信类似的行为。

答案 2 :(得分:0)

我无法找到关于iOS为何如此行事的直接答案。虽然我找到了另一种解决方法。

我正在使用CentralManager实现PeripheralManager。这样,即使iOS设备的屏幕关闭,我也可以控制iOS设备。