我正在开发一个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)。
答案 0 :(得分:2)
如果BLE设备停止广播而不是发送断开信号,则会出现此问题。如果BLE设备没有发送断开连接信号,则Android设备认为连接已打开且等待一段时间(5-20秒),然后使用超时状态代码调用onconnectionstatechange()。如果你可以让BLE设备发送断开信号而不是停止广播它应该解决问题。希望这有帮助