2015-09-04 19 views
2

我正在为Android中的BLE开发。 Android可以通过Gatt.writeCharacteristic向BLE设备发送数据。如何在Android中为BLE编写快速且稳定的特性?

但是当我写连续特性到BLE装置(在1秒钟内5次),我会得到GATT_DISCONNECTED并返回null当我尝试getServiceGetCharacteristic

我已经看到一些BLE LED产品在市场上。它使用颜色选择器在Android中像下面的图片:

enter image description here

当用户快速改变颜色的颜色选择器中,BLE LED也立刻改变颜色。

如何在BLE上编写像BLE LED产品一样快速稳定的特性?

回答

5

当你调用gatt.writeCharacteristic你需要做两件事情:

  1. 您需要排队关贸总协定的读写请求,这样,当你犯了一个读或写请求,你必须等待相应的回调在请求下一次读取或写入之前在BluetoothGattCallback中。这是一个没有很好记录的Android BluetoothGatt行为。
  2. 与上面1.有些相关,你应该检查gatt读写请求的布尔返回值。如果它没有返回true,那么你的请求失败。这发生在您发出下一个请求时,其他一些gatt操作仍在进行中。

我发现快速读取(或写入)BLE特征的最好方法是发出请求,等待回调并从回调中发出下一个请求。如果有更快或更可靠的方法,我不知道它。

+1

如果我有很多操作要做,我该如何同步这些操作?我的意思是等待一个操作的回调做下一个 – Fakher

+0

我有一个对象代表我的可乐设备。它的API看起来像: object.readX,obj.writeY,obj.addListener(l)。它内部实现了一个命令队列(java.util.Queue),其中每个readX或writeY(gatt操作)在队列中排队。这个队列在回调函数中得到了服务(并且一个超时事件从未发生过这种回调,我基本想法 –

+0

我尝试使用ArrayDeque来实现它,在写/读回调有反馈后,请求下一次读或写操作。速度太慢... – Wun