7

使用 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. 有什么方法可以在外围设备关闭时得到通知?

提前致谢。

4

1 回答 1

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

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

于 2013-08-31T17:46:16.490 回答