【问题标题】:How to write characteristic fast and stable for BLE in Android?如何在Android中为BLE编写快速稳定的特性?
【发布时间】:2015-09-04 02:53:01
【问题描述】:

我正在为 Android 中的 BLE 进行开发。 Android可以通过Gatt.writeCharacteristic向BLE设备发送数据。

但是当我将连续 Characteristic 写入 BLE 设备(1 秒内 5 次)时,我会得到 GATT_DISCONNECTED,当我尝试 getServiceGetCharacteristic 时它会返回 null .

我在市场上看到了一些 BLE LED 产品。它在 Android 中使用了一个颜色选择器,如下图所示:

当用户在颜色选择器上快速改变颜色时,BLE LED也会立即改变颜色。

如何像市面上的BLE LED产品一样,为Android中的BLE编写快速稳定的特性?

【问题讨论】:

    标签: android bluetooth-lowenergy


    【解决方案1】:

    当您拨打gatt.writeCharacteristic 时,您需要做两件事:

    1. 您需要将gatt读写请求排队,这样当您发出读写请求时,您必须等待BluetoothGattCallback中相应的回调,然后再请求下一次读写。这是一个没有很好记录的 Android BluetoothGatt 行为。
    2. 和上面的1有点关系,你应该检查gatt读写请求的布尔返回值。如果它不返回 true,那么您的请求失败。如果在您发出下一个请求时其他一些 gatt 操作仍在进行中,则会发生这种情况。

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

    【讨论】:

    • 如果我有很多操作要做,我该如何同步这些操作??我的意思是等待一个操作的回调来做下一个操作
    • 我有一个代表我的 ble 设备的对象。它的 api 看起来像:object.readX、obj.writeY、obj.addListener(l)。在它内部实现了一个命令队列(java.util.Queue),每个 readX 或 writeY(gatt 操作)都在其中排队。队列在 ble 回调时得到服务(如果回调永远不会发生,则超时。这就是基本思想
    • 我尝试使用 ArrayDeque 来实现它。写/读回调有反馈后,请求下一次读或写。但是速度太慢了……
    • 你是妈妈! / Είσαι η μάνα!
    • 你救了我的命。
    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2023-03-14
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多