关闭外设导致意外行为

时间:2013-08-22 06:13:04

标签: 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 个答案:

答案 0 :(得分:1)

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

  2. 外围设备关闭时是否有任何方法可以获得通知? 不,我不这么认为,任何动作收到的事件都是广播的,所以它等待来自设备的信号但它没有得到一个,你唯一能做的就是通过其他广播发送它(或{ {1}}请求)从设备的另一端实现它