gpt4 book ai didi

ios - BLE设备随机断开

转载 作者:行者123 更新时间:2023-11-29 05:35:38 25 4
gpt4 key购买 nike

我正在使用 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对象。让多个经理一起工作并非不可能,但我发现他们经常会互相妨碍。

我怀疑您连接的设备比您想象的要多,当您与其中一台设备断开连接时,您会重置管理器并干扰其他设备。可能不是这样,可能是很多事情,但这是您在此处发布的代码中最可疑的部分。

关于ios - BLE设备随机断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com