Android BLE ACL_DISCONNECTED有时会延迟

时间:2017-04-05 16:41:33

标签: android bluetooth bluetooth-lowenergy

我正在开发一个Android应用程序(API 23+),它通过BLE与设备进行通信。没有配对/绑定。

交互的愉快路径是应用程序连接然后向设备发送消息,然后设备发回回来,然后它们都断开连接。

在描述我在Android BLE unexpectedly reconnects potentially from PBAP / MAP Bluetooth profiles中询问的奇怪行为时,我创建了一个简单的服务来监控低级蓝牙连接;它监听BluetoothDevice.ACTION_ACL_CONNECTED和BluetoothDevice.ACTION_ACL_DISCONNECTED的广播。

虽然大多数情况下连接/断开连接在应用程序和设备之间很好,但有时应用程序会收到断开连接通知,在应用程序和设备关闭连接后约5-20秒。我已经验证设备实际已关闭,并且应用程序日志都显示系统已正确关闭连接。

在这些情况下,如果应用在广播ACL_DISCONNECTED之前尝试再次与设备连接,则会在ACL_DISCONNECTED广播后收到错误或后续连接请求排队并启动。

这似乎不是特定于设备---我使用各种品牌和型号进行测试---也不是API版本(23-25)。

  • 这是否已知(预期)行为?
  • 有没有办法缓解这个问题?...以确保及时确实发生断开连接?
  • 是否有更直接的方式---例如,通过API调用---来判断连接是否仍在运行,而不是接收与ACL相关的广播?

1 个答案:

答案 0 :(得分:2)

如果BLE设备停止广播而不是发送断开信号,则会出现此问题。如果BLE设备没有发送断开连接信号,则Android设备认为连接已打开且等待一段时间(5-20​​秒),然后使用超时状态代码调用onconnectionstatechange()。如果你可以让BLE设备发送断开信号而不是停止广播它应该解决问题。希望这有帮助