核心蓝牙外设每 30 秒断开一次

Core Bluetooth Peripheral disconnects every 30 seconds

我有一个用作蓝牙 LE 外围设备的应用程序。我有一个具有四个特征的服务。 4 个中的 2 个是只读和可写的,另外两个配置为通知。

如果我订阅了其中一项 "notify" 特性,那么应用程序将不会断开连接,直到我手动断开连接,运行良好。

我的问题是,如果我读取或写入其他特性,然后大约 30 秒处于非活动状态,BTLE 连接会与外围设备断开连接。这可能是苹果设置的限制,不确定。

任何人都知道即使在没有任何订阅者并且在 30 秒内没有收到读取或写入命令的情况下也能保持外围设备活动的解决方案吗??

这是 BLE 4.0 规范的副产品。低功耗蓝牙明确设计为不会长时间保持连接,这就是您所描述的。

绕过这个的唯一方法(除了订阅你所发现的特性之外)是修改你正在连接的外围设备上的 BLE 堆栈的实现,并删除或延长连接到一个点的间隔你觉得满意。

虽然这可能对您没有帮助,因为 BLE 通信的双方协商这些值并且 iOS 可能会施加低于您请求的阈值的最大值。

在我的案例中,原因是特征属性之间的不匹配。我将数据写入带有 "waiting for response" 选项的特征,但特征处于 'without response' 状态。

故障现象:当BLE peripheral 没有写响应时,delegate 中的write callback 不起作用。