Swift 3:如何在后台扫描外围设备?

时间:2016-10-13 14:44:15

标签: ios swift core-bluetooth

以下是我的情景:

我连接两个外围设备,将我的应用程序置于后台模式并开始使用外围设备,直到他们失去与我的应用程序的连接。回来时,他们无法再次联系。

当我在应用程序在前台运行时执行相同的实验时,没有发生任何问题 - 外围设备靠近iPhone会导致重新连接。

但是,我在控制台中看到,当外围设备丢失连接时,正在调用DidDisconnectPeripheral方法。问题是在这个方法中没有调用扫描

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
    numberOfTagsSending = numberOfTagsSending - 1
    numberOfConnectedTags = numberOfConnectedTags - 1
    print("Tag was disconnected. Start scanning.")

    synchronizer.alreadySynced = false

    central.scanForPeripherals(withServices: arrayOfServices, options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])
}

我看了this回答,并且做了一切完全相同的方式,不幸的是它不起作用。

提前致谢

1 个答案:

答案 0 :(得分:4)

获得CBPeripheral个实例后,您无需再次发现它。你可以简单地连接到它;如果外围设备当前不在范围内,则一旦外围设备进入范围,iOS将自动连接,并将调用您的didConnectPeripheral委托方法。

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
    numberOfTagsSending = numberOfTagsSending - 1
    numberOfConnectedTags = numberOfConnectedTags - 1

    central.connect(peripheral)
}