Android Gatt:如何知道响应属于哪个请求?

问题描述 投票:0回答:1

简短问题:

BluetoothLECallbackInterface.onCharacteristicRead()
被触发时,我如何知道这是对哪个请求的答复?

更详细一点:
调用

BluetoothGatt.readCharacteristic()
时,会调用我连接设备时传入的
onCharacteristicRead()
对象的
BluetoothGattCallback
方法
(我传给
BluetoothDevice.connectGatt()
的那个)

现在让我们想象一下我正在进行十次不同的 readCharacteristic() 调用。

onCharacteristicRead()
将被触发10次。
我如何知道哪个回调调用属于哪个请求?
在调用
readCharacteristic()
时,我可以如何、何时或向哪个类/方法传递请求 ID,我可以依靠
onCharacteristicRead()
来识别我正在处理结果的请求?

我刚刚发现蓝牙连接和通信,也许我的问题没有意义,也许我应该等待请求完成然后再开始调用新请求?
但是,当使用异步调用时,我假设我可以进行所有我想要的调用,然后整理响应,因为响应中的某些内容告诉我它是对哪个请求的答复。
这个“响应中的某些内容”是我在android文档中找不到的任何地方。
相反,就像必须等待电子邮件的送达确认才能发送新电子邮件,而不必冒不知道已送达哪封电子邮件的风险......:-(

有写作特点的场景也许更有说服力。
想象一下,我想给蓝牙设备一些值,然后他必须在设备端存储、求和或其他值。
我将 1、3、4、2 和 7 发送到该设备。
假设

onCharacteristicWrite()
成功触发 4 次,失败状态触发 1 次。
如何知道账户设备端尚未处理哪个请求?

android bluetooth bluetooth-lowenergy android-bluetooth bluetooth-gatt
1个回答
0
投票

从这个意义上讲,不支持同时读取或写入。您需要等待回调才能开始下一个请求。典型的实现使用队列来简化它。

检查此:https://stackoverflow.com/a/21358451/1860868

© www.soinside.com 2019 - 2024. All rights reserved.