我正在使用,当应用程序处于前台或后台或设备被锁定且设备屏幕仍处于打开状态时CoreBluetooth
,回调方法被频繁调用。didDiscoverPeripheral
但是一旦屏幕关闭/黑屏(睡眠模式),它的回调频率就会降低到几乎为零。
这可能是什么原因造成的?设备电池已满且蓝牙已打开。
请帮我解决这个问题。
谢谢。
我正在使用,当应用程序处于前台或后台或设备被锁定且设备屏幕仍处于打开状态时CoreBluetooth
,回调方法被频繁调用。didDiscoverPeripheral
但是一旦屏幕关闭/黑屏(睡眠模式),它的回调频率就会降低到几乎为零。
这可能是什么原因造成的?设备电池已满且蓝牙已打开。
请帮我解决这个问题。
谢谢。
关于 CoreBluetooth 和后台操作,您应该注意两个主要事项:
1.)CBCentralManagerScanOptionAllowDuplicatesKey
应用程序进入后台后,该标志将被忽略。如果您在前台看到了一个外围设备,您将不会在后台(在相同的扫描周期内)为同一外围设备获得另一个 didDiscover 回调。您可以通过关闭外围设备的电源来测试这一点,并且只有在您的中央设备在后台运行一段时间后才能打开电源。然后,您应该会收到回调。
2.) 另一个问题是外设发现的回调时间在后台时被限制。例如,如果您会在 1 秒内在前台发现外围设备。在后台发现相同的外围设备可能需要长达 60 秒的时间。
我无法找到任何关于 iOS 为何如此行为的直接答案。尽管我找到了解决此问题的替代方法。
我正在与 CentralManager 一起实现 PeripheralManager。这样,即使 iOS 设备的屏幕已关闭,我也可以控制 iOS 设备。
tdevoy 是正确的,但是,我会给出稍微乐观的发现时间值。根据我的经验,当一个或两个设备处于后台/挂起状态时,发现只需要 1-2 秒。
如果您的应用程序在后台时没有收到回调,那么您的代码很可能有点错误。在 WWDC 2013 CoreBluetooth 视频中,工程师提供了有关如何实现您想要的行为的明确说明。一旦您能够接收到回调,您就可以安排并呈现一个 UILocalNotification,它会提供与接收短信类似的行为。