![](/img/trans.png)
[英]iOS BLE disconnecting right after connection, only restarting device helps
[英]BLE device randomly disconnecting
我正在使用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)
}
这将开始读取值
首先,我同意CodeBender的观点,即在该区域拥有许多设备可能具有挑战性,但是关于您的代码的几件事使我感到怀疑。
首先,您没有记录任何内容,因此很难确切知道发生了什么。 您肯定要记录每个步骤。
确保您正在扫描所需的服务; 不要在scanForPeripherals
传递nil
。 同样,不要将nil
传递给discoverServices
。
但是最可疑的部分在这里,我怀疑这可能是原因:
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
...
self.manager = CBCentralManager(delegate: self, queue: nil)
...
}
您不应该在每次外围设备断开连接时都创建新的管理器。 中央管理人员处理所有外围设备; 不只是一种联系。 您应该为程序的整个运行时间设置一次manager
,并且通常应该避免在系统中具有多个CBCentralManager
对象。 让多个经理一起工作不是没有可能,但是我发现他们经常会互相干扰。
我的怀疑是,您连接的设备数量超出了您的想象,并且当您断开其中一台设备的连接时,您会重置管理器并破坏其他设备。 可能并非如此,可能有很多事情,但这是您在此处发布的代码中最可疑的部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.