iOS如何在后台重新连接到BLE设备?

时间:2014-11-12 02:21:12

标签: ios bluetooth-lowenergy background-process

有许多相关问题,但(显然)没有答案。 SO ...

我的iOS应用 在应用处于后台时从我的BLE设备获取更新。如果我与BLE设备失去联系,那么在centralManager:didDisconnectPeripheral:我打电话 - [CBCentralManager cancelPeripheralConnection:] - 否则我将永远不会重新连接丢失的外围设备。然后我打电话给[(重新)电话 - [CBCentralManager scanForPeripheralsWithServices:options:]

记录显示didDisconnectPeripheral调用及其包含的调用在后台时都发生。但是,仅当应用程序从后台唤醒时才会重新连接。

所以我能够在后台(连接!)与连接的BLE设备通信,但不能重新连接。这对我的应用程序非常重要,并且(人们会想到)其他应用程序。建议欢迎。

4 个答案:

答案 0 :(得分:9)

您不需要取消连接 - 它已经断开连接 您不需要重新扫描外围设备 - 您已经识别了外围设备。

didDisconnectPeripheral中,您只需致电

即可
[central connectPeripheral:peripheral options:nil];

一旦外围设备再次可见,核心蓝牙将重新连接

完整的示例在此处 - https://github.com/paulw11/BTBackground

答案 1 :(得分:9)

Paul是正确的,我不需要取消连接,而且我不需要重新扫描,我需要做的就是调用connectPeripheral。但是......我没有做的是这个:

_manager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)];

我正在为队列传递nil,这意味着我的CBCentralManagerDelegate回调正在主线程上运行。

答案 2 :(得分:3)

我知道你可能已经弄明白了。我自己偶然发现了这个问题。单独做以下事情并不能完全解决问题(至少对我而言):
[central connectPeripheral:peripheral options:nil];

对于选项而不是“nil”,您需要在上述方法中提供“选项”。您还需要设置其他内容(例如应用的info.plist)。 阅读Apple关于如何为App启用后台蓝牙操作的说明。我能够让它工作并接收连接,断开连接,更新等事件,甚至扫描可以在后台工作。不要重复Apple文档所写的所有内容,您可以查看以下链接:
Core Bluetooth Background Processing for iOS Apps

希望这有帮助。

答案 3 :(得分:0)

在标签"功能" - >背景模式,选择"用户蓝牙LE配件"和#34;充当蓝牙LE配件"。我不确定它是否可行,但你可以尝试一下。