1

我制作了一个连接到 ble 设备并从中接收数据的应用程序。我在提示和观察部分关注了这个链接“ http://toastdroid.com/2014/09/22/android-bluetooth-low-energy-tutorial ”,它对所有 GATT 操作进行排队。我怎么做?

4

2 回答 2

3

查看 NordicSemiconductors 开源项目Puck Central,或者更具体地说是GattManager 类,它完美地演示了如何对所有 GATT 操作进行排队。

但是,如果您不想自己处理这种低级蓝牙细节,我可以推荐很棒的库RxAndroidBle,它为您完成了很多繁重的工作。

于 2016-09-19T16:22:52.763 回答
2

要将请求排队,您可以创建一个队列类,其中包含请求的 Arraylist。

每次您要发出请求时,将其添加到队列并开始处理队列(如果尚未处理队列)。处理完当前项目后,检查是否还有要处理的项目并继续处理它们。

您可能还需要添加超时,以防其中一个请求被卡住。

关于如何使用处理程序处理队列的示例代码:

private void startProcessingQueue() {
    if (queueIsRunning) {
        return;
    }

    queueIsRunning = true;
    h.postDelayed(new Runnable(){
        public void run(){
            processQueue();

            if(queue.isEmpty()) {
                queueIsRunning = false;
                return;
            }

            h.postDelayed(this, QUEUE_PROCESSING_DELAY);
        }
    }, QUEUE_PROCESSING_DELAY);
}
于 2016-09-19T01:26:15.660 回答