【发布时间】:2021-07-29 12:20:48
【问题描述】:
总结一下,我有一个设备通过 ble 与我的应用程序通信。该应用程序使用 Corebluetooth 来处理连接和通信。
问题:
当设备超出范围时,它将断开连接 -> 它调用 diddisconnect() 函数,我在其中检查它是否超时并再次调用 central.connect。
然后它会立即开始连接并立即在某些设备(仅限 iOS14)上,它会转到 didfailtoconnect 并显示错误消息:
"Error Domain=CBErrorDomain Code=15 "连接加密失败,连接意外超时。" UserInfo={NSLocalizedDescription=连接加密失败,连接意外超时。"
据我所见,似乎只存在于 iOS14 设备上。
我还测试了阻塞信号,如果我阻塞来自设备的信号,问题并不明显。如果我阻止来自手机的信号,问题就很明显了。不知道这是怎么回事,感觉他们都触发了超时。
其他地方也可能有问题,但在我的 iOS13 设备上似乎处理得很好。(主要在 4 部手机上测试,每个版本 2 部)
另外澄清一下,应用程序充当中心,设备充当外围设备。
【问题讨论】:
-
你搞错了。一旦您的设备超出范围,您应该只在设备在范围内而不直接连接到设备时宣传它。连接产生错误 bcz 设备不可用。
-
@Kudos 感谢您的回复,但据我了解,调用连接会在系统级别排队连接,直到找到设备(或蓝牙/电话已关闭)。你有什么好的例子来说明你的意思,当设备进入范围时保持连接?
-
是的,就像您正在使用荣誉乐队 5。如果超出范围,您将被断开连接。然后你就可以开始扫描设备,直到它被扫描。
-
@Kudos 是的,我应该尝试在设备断开连接时启动扫描。据我在苹果文档中看到的,有 3 种方法。其中两个是从系统中获取已知或连接的外围设备并尝试连接。第三就像你说的,你用服务扫描。我只是不明白为什么它在 iOS14 之前可以正常工作。
标签: ios swift core-bluetooth ios-bluetooth