核心蓝牙外设每30秒断开连接

3
我有一个作为蓝牙低功耗外设的应用程序。我有一个服务,其中包含四个特征。其中4个中的2个仅可读写,另外两个被配置为通知。
如果我订阅其中一个“通知”特征,则应用程序不会断开连接,直到我手动断开连接,工作正常。
我的问题是,如果我读取或写入其他特征,并且在大约30秒内处于非活动状态,则BTLE连接将与外设断开连接。这可能是由苹果设置的限制,不确定。
是否有人知道如何解决即使没有订阅者并且在30秒内未收到任何读取或写入命令时也保持外设处于活动状态的问题?

如果您没有订阅某个特征,则其他设备上的功能可能会断开您的iDevice。在这种情况下,允许“删除”寄生BLE设备可能性。 - Larme
2个回答

1
这是BLE 4.0规范的副产品。蓝牙低能耗被明确地设计为不保持长时间连接,这正是你所描述的。
除了订阅特征值(正如你已经发现的那样),绕过这个问题的唯一方法是修改你连接的外设上BLE协议栈的实现,删除或延长连接间隔以达到你认为满意的程度。
虽然这可能对你也没有帮助,因为BLE通信的双方都会协商这些值,而iOS可能会强制实施一个低于你请求的阈值的最大值。

如果您只有一个特性是NOTIFY=NO属性,那怎么办?这是可能的吗,还是30秒是最大连接长度? - royherma
我不确定在最新版本的CoreBluetooth中是否仍然期望这种实现方式,但是如果没有可通知的特征,iOS就没有理由在标准超时之外维持蓝牙连接。 - Robert Haworth

0
在我的情况下,原因是特征属性不匹配。我使用“等待响应”选项将数据写入了一个特征,但该特征处于“无响应”状态。
症状:当BLE外设没有写入响应时,在代理中编写回调不起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接