检查Android上是否有挂起的BLE操作

检查Android上是否有挂起的BLE操作,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,Android的BLEAPI(据我所知,所有BLEAPI)都是异步的,不排队。也就是说,如果您这样做(伪代码): 第二次写入将立即替换第一次写入,而第一次写入将永远不会被发送。实际上,你必须这样做: characteristic.write("a"); void onCharacteristicWrite() { characteristic.write("b"); } 我的问题是:Android上有没有办法检查BluetoothGatt是否有挂起的读写操作,这样我就可以知道我是否

Android的BLEAPI(据我所知,所有BLEAPI)都是异步的,不排队。也就是说,如果您这样做(伪代码):

第二次写入将立即替换第一次写入,而第一次写入将永远不会被发送。实际上,你必须这样做:

characteristic.write("a");

void onCharacteristicWrite() {
     characteristic.write("b");
}

我的问题是:Android上有没有办法检查
BluetoothGatt
是否有挂起的读写操作,这样我就可以知道我是否会覆盖现有的操作?或者我需要自己手动跟踪吗?

我有另一种方法向您提出建议

在负责发送蓝牙请求的类中声明:

private PriorityBlockingQueue<QueueRequest> queueRequestList;
正如您所看到的,这个类检查是否有任何挂起的请求。如果有,则放入队列并等待最后一个请求完成。如果队列中没有任何元素,则将其放入队列中(以了解将来的请求是否存在挂起的请求),并立即发送它

当响应来自BLE设备时,调用函数:

public void sendNextRequestAgain() {
    popFirst();
    QueueRequest request = peekFirst();
    sendRequest(request);
}
这意味着:从队列中获取下一个元素

优点:

  • 队列在线程之间同步
  • 允许将您想要的任何数据保存在队列请求中(数据、代理、时间等)
其他一些方法:

private void putOnQueueEnd(QueueRequest queueRequest) {
    queueRequestList.put(queueRequest);
}

private QueueRequest popFirst() {
    return queueRequestList.poll();
}

private QueueRequest peekFirst() {
    return queueRequestList.peek();
}

我有另一种方式向你求婚

在负责发送蓝牙请求的类中声明:

private PriorityBlockingQueue<QueueRequest> queueRequestList;
正如您所看到的,这个类检查是否有任何挂起的请求。如果有,则放入队列并等待最后一个请求完成。如果队列中没有任何元素,则将其放入队列中(以了解将来的请求是否存在挂起的请求),并立即发送它

当响应来自BLE设备时,调用函数:

public void sendNextRequestAgain() {
    popFirst();
    QueueRequest request = peekFirst();
    sendRequest(request);
}
这意味着:从队列中获取下一个元素

优点:

  • 队列在线程之间同步
  • 允许将您想要的任何数据保存在队列请求中(数据、代理、时间等)
其他一些方法:

private void putOnQueueEnd(QueueRequest queueRequest) {
    queueRequestList.put(queueRequest);
}

private QueueRequest popFirst() {
    return queueRequestList.poll();
}

private QueueRequest peekFirst() {
    return queueRequestList.peek();
}
是的,这和。这可能是最好的方法;我只是想知道是否有其他选择。是的,这和。这可能是最好的方法;我只是想知道是否有其他选择。