我正在使用BLE设备,并使用swift将其连接到通孔。当我打开它时,它将连接,断开连接,然后重新连接。我不知道为什么它会首先断开连接,电池电量为100%,而且我什么也不会触发断开连接,任何人都知道会发生什么情况吗?这是我的一些功能供参考
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
kestrelPeripheral = peripheral
kestrelPeripheral.delegate = self
manager.connect(kestrelPeripheral)
manager.stopScan()
self.kestrelIsConnected = true
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
delegate?.didDisconnect()
cancelReading()
self.kestrelIsConnected = false
self.manager = CBCentralManager(delegate: self, queue: nil)
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
self.isInitialReading = false
kestrelPeripheral.discoverServices(nil)
delegate?.didConnect()
}
更多内容:
func startReading() {
self.manager = CBCentralManager(delegate: self, queue: nil)
self.takeReading = true
progressHUD = ReadingProgressHUD(text: "Taking Reading")
self.vc!.view.addSubview(self.progressHUD)
}
这将开始读取值
答案 0 :(得分:0)
首先,我同意CodeBender的观点,即在该区域拥有很多设备可能具有挑战性,但是关于您的代码的几件事使我感到怀疑。
首先,您没有记录任何内容,因此很难确切知道发生了什么。您肯定要记录每个步骤。
确保要扫描的正是您想要的服务;不要通过nil
中的scanForPeripherals
。同样,请勿将nil
传递给discoverServices
。
但是最可疑的部分在这里,我怀疑这可能是原因:
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
...
self.manager = CBCentralManager(delegate: self, queue: nil)
...
}
您不应该在每次外围设备断开连接时都创建新的管理器。中央管理人员处理所有外围设备;不只是一种联系。您应该为程序的整个运行设置一次manager
,并且通常应该避免在系统中有多个CBCentralManager
对象。让多个经理一起工作不是没有可能,但是我发现他们经常会互相干扰。
我怀疑您连接到的设备数量超出了您的想象,并且当您断开其中一台设备的连接时,您会重置管理器并破坏其他设备。可能并非如此,可能有很多事情,但这是您在此处发布的代码中最可疑的部分。