3

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

如果我订阅了“通知”特征之一,那么应用程序将不会断开连接,直到我手动执行此操作,效果很好。

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

任何人都知道即使没有任何订阅者并且在 30 秒内没有收到读取或写入命令也可以保持外围设备处于活动状态的解决方案?

4

2 回答 2

1

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

绕过此问题的唯一方法(除了订阅您发现的特性之外)是修改您正在连接的外围设备上的 BLE 堆栈的实现,并将连接间隔移除或延长到您认为满意的点。

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

于 2015-04-20T14:34:43.527 回答
0

在我的情况下,原因是特征属性之间的不匹配。我使用“等待响应”选项将数据写入特征,但特征处于“无响应”状态。

症状:当BLE外设没有写响应时,委托中的写回调不起作用。

于 2017-11-29T15:54:49.537 回答