关闭外设导致意外行为

reT*_*eTs 7 android bluetooth-lowenergy android-bluetooth

使用Android 4.3/Samsung BLE 2.0 SDK时,观察到当外围设备关闭时,SDK将立即或在延迟20秒后接收onConnectionStateChange(DEVICE_DISCONNECTED).根据我的经验,这取决于外围设备实现,其中一些将尝试报告它们被关闭而有些则没有,因此SDK必须等待约20秒才能超时.

为了消除这种行为,我尝试使用Timer来检查我是否可以读取某个特征.如果读取超时,我会调用disconnect(Android 4.3)/ cancelConnection(Samsung)来终止连接.调用本身成功,onConnectionStateChange回调返回状态GATT_SUCCESS.然后我打开外围设备并立即连接到它,发现服务,并在我尝试读/写/通知任何通知时遇到问题.通过在iOS中使用LightBlue,我可以确认外围设备没有连接.

关闭外围设备20秒后,我将收到DEVICE_DISCONNECTED回调.之后我再次联系,一切运作得很好.

有两个问题:1.我们是否应该在20秒延迟期间连接到外围设备?2.外围设备关闭时是否有任何方法可以获得通知?

提前致谢.

小智 1

  1. 我们是否应该在 20 秒的延迟期间连接到外设?不,从你的结果来看,操作系统正在手机内执行一些操作来控制DEVICE_CONNECTEDDEVICE_DISCONNECTED事件,这可能是由于多种原因造成的,例如设备架构、安全原因或回调本身被延迟以节省能源

  2. 当外围设备关闭时有什么方法可以收到通知吗?不,我不这么认为,任何操作收到的事件都会被广播,因此它正在等待来自设备自身的信号,但它没有收到信号,您在这里可以做的唯一一件事就是通过其他广播(或请求)发送HTTP它)从设备的另一端实现它