当固件调用以断开外围设备的连接时,我的代表将被调用(didDisconnectPeripheral),此后,我启动了一个计时器,并尝试在5秒钟内重新连接(该计时器已启用重复)。

我的didFailToConnectPeripheral没有被调用,connectToPeripheral也没有被调用。大约30秒后,芯片会自动与应用重新连接。

即使我尝试调用[_manager cancelPeripheralConnection:_peripheral];,电路板也无法完全断开连接。

是否有人对外围设备处于这种“边缘”状态有更多信息?我找到了以下页面:iOS 6 - Bluetooth LE disconnectiOS CoreBluetooth reconnecting device with UUID,看来此问题与Core Bluetooth有关。有谁知道如何解决这个问题?

我收到以下错误:

Error Domain=CBErrorDomain Code=6 "The connection has timed out unexpectedly." UserInfo=0x1e09c050 {NSLocalizedDescription=The connection has timed out unexpectedly.}

我必须断开连接的原因是因为板上的处理器已被用来做其他事情,因此无线电无法保持 Activity 状态。

这是苹果开发者论坛上讨论的链接:
https://devforums.apple.com/message/898902

最佳答案

cancelPeripheralConnection方法被视为Core Bluetooth的信号,表明您的应用程序将不再使用该外围字符。在iOS端完成维护工作后,您将获得didDisconnecPeripheral回调。但是,这并不意味着外围设备已经物理断开。 BLE连接仍可以处于 Activity 状态,但您的应用程序不知道这一点。

对您来说,很明显的问题是,iOS在仍处于连接状态时无法启动新连接。

解决此类问题的最佳方法是启动外围设备的断开连接。在外围设备中创建特征并将其修改用作外围设备断开连接的信号。或以其他方式实施它,但使断开连接由您的协议而不是由Core Bluetooth实现处理。

关于ios - 使用corebluetooth从iOS断开外围设备(TI CC2541)时出现的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19083306/

10-11 21:39