Corebluetooth - 在 iOS14

问题描述

总而言之,我有一个设备通过 ble 与我的应用程序进行通信。该应用程序使用 Corebluetooth 来处理连接和通信。

问题:

当设备超出范围时,它将断开连接 -> 它调用 diddisconnect() 函数,在那里我检查它是否超时并再次调用 central.connect。

然后它会开始连接,并立即在某些设备(仅限 iOS14)上,它会转到 didfailtoconnect 并显示错误消息:

"Error Domain=CBErrorDomain Code=15 "连接加密失败,连接意外超时。" UserInfo={NSLocalizedDescription=连接加密失败,连接意外超时。"

据我所知,似乎只存在于 iOS14 设备上。

我还测试了阻塞信号,如果我阻塞了来自设备的信号,则问题并不明显。如果我阻止来自电话的信号,问题就很明显了。不确定这是怎么回事,感觉它们都触发了超时。

其他地方也可能有问题,但在我的 iOS13 设备上似乎处理得很好。(主要在 4 部手机上测试,每个版本 2 部)

还要澄清一下,应用程序充当中心,设备充当外围设备。

解决方法

如果我从 CBErrorEncryptionTimedOut (15) 中正确解释了错误消息,这意味着设备发起了连接,然后,突然在 iOS 设备发起加密程序后,连接意外终止。

因此应该或多或少地与 CBErrorConnectionTimeout (6) 相同。

如果这种情况一直发生,您应该使用 BLE 嗅探器来查看发生了什么;也许是 iOS 中的一些错误。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...