使用 Android 4.3/Samsung BLE 2.0 SDK,观察到当外围设备关闭时,SDK 将立即或延迟约 20 秒后收到 onConnectionStateChange (DEVICE_DISCONNECTED)。根据我的经验,这取决于外围设备的实现,其中一些会尝试报告它们正在关闭,而另一些则没有,因此 SDK 必须等待约 20 秒才能超时。
为了消除这种行为,我尝试使用计时器来检查我是否可以读取某个特征。如果读取超时,我会调用 disconnect(Android 4.3)/cancelConnection(Samsung) 来终止连接。调用本身成功并且 onConnectionStateChange 回调返回状态 GATT_SUCCESS。然后我打开外围设备并立即连接它,发现服务,当我尝试读/写/通知任何通知时遇到问题。通过在 iOS 中使用 LightBlue,我可以确认外围设备未连接。
在关闭外围设备 20 秒后,我将收到 DEVICE_DISCONNECTED 回调。之后我再次连接,一切正常。
有两个问题:1.我们应该在20s延迟期间连接到外围设备吗?2. 有什么方法可以在外围设备关闭时得到通知?
提前致谢。