Swift 3:如何在后台扫描外设?
Swift 3: How to scan for peripherals in background?
这是我的场景:
我连接了两个外围设备,将我的应用程序置于后台模式并开始使用外围设备,直到它们与我的应用程序失去连接。回来时,他们在伸手可及的地方不再连接。
当我在前台 运行 应用程序时执行相同的实验时,没有发生任何问题 - 外围设备更接近 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])
}
我阅读了 答案并以完全相同的方式做了所有事情,不幸的是它不起作用。
提前致谢
一旦您拥有 CBPeripheral
个实例,您就不需要再次发现它。您可以简单地连接到它;如果外围设备当前不在范围内,那么 iOS 将在外围设备进入范围内后自动连接并调用您的 didConnectPeripheral
委托方法。
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
numberOfTagsSending = numberOfTagsSending - 1
numberOfConnectedTags = numberOfConnectedTags - 1
central.connect(peripheral)
}
这是我的场景:
我连接了两个外围设备,将我的应用程序置于后台模式并开始使用外围设备,直到它们与我的应用程序失去连接。回来时,他们在伸手可及的地方不再连接。
当我在前台 运行 应用程序时执行相同的实验时,没有发生任何问题 - 外围设备更接近 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])
}
我阅读了
提前致谢
一旦您拥有 CBPeripheral
个实例,您就不需要再次发现它。您可以简单地连接到它;如果外围设备当前不在范围内,那么 iOS 将在外围设备进入范围内后自动连接并调用您的 didConnectPeripheral
委托方法。
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
numberOfTagsSending = numberOfTagsSending - 1
numberOfConnectedTags = numberOfConnectedTags - 1
central.connect(peripheral)
}