同时使用 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. 有没有办法在外设关闭时得到通知?
提前致谢。
最佳答案
我们是否应该在 20 秒的延迟期间连接到外围设备? 不,从你的结果来看,操作系统似乎正在手机中执行一些操作来控制
DEVICE_CONNECTED
或DEVICE_DISCONNECTED
事件,这可能是由于设备架构、安全性等多种原因造成的原因或回调本身延迟以节省能量有什么方法可以在外围设备关闭时收到通知? 不,我不这么认为,接收到的任何 Action 的事件都是广播的,所以它正在等待来自它自己的设备的信号,但它没有收到信号,你在这里唯一能做的就是通过其他广播发送它(或
HTTP
请求)从设备的另一端实现吧
关于android - 关闭外设导致意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372896/