以下是我的情景:
我连接两个外围设备,将我的应用程序置于后台模式并开始使用外围设备,直到他们失去与我的应用程序的连接。回来时,他们无法再次联系。
当我在应用程序在前台运行时执行相同的实验时,没有发生任何问题 - 外围设备靠近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回答,并且做了一切完全相同的方式,不幸的是它不起作用。
提前致谢
答案 0 :(得分:4)
获得CBPeripheral
个实例后,您无需再次发现它。你可以简单地连接到它;如果外围设备当前不在范围内,则一旦外围设备进入范围,iOS将自动连接,并将调用您的didConnectPeripheral
委托方法。
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
numberOfTagsSending = numberOfTagsSending - 1
numberOfConnectedTags = numberOfConnectedTags - 1
central.connect(peripheral)
}