【发布时间】:2017-11-03 13:46:27
【问题描述】:
我正在尝试编写 BLE Android 应用程序。我发现有时当我打电话时 BluetoothGatt.writeDescriptor() 它返回 false。
我在文档中没有发现任何对此功能的限制说明。但是 ppl on stack overflow 说我需要等待BluetoothGattCallback.onDescriptorWrite(),然后再尝试编写另一个描述符。
这里有一个回复说BLE is busy 使用 writeDescriptor() 并且不能进行其他写入。
这里是another thread 说你不能调用两次writeCharacteristic()。
我的问题是
- 这是真的吗?
- 是否真的缺少一些用于序列化 BLE 请求的内部 android API 缓冲区,并且每个开发人员都必须自己完成?
- 是否适用于不同的功能?例如,当我拨打
writeDescriptor()时,我知道在收到onDescriptorWrite()之前我不能第二次拨打writeDescriptor()。但是当我想拨打writeCharacteristic()时,我必须等待onDescriptorWrite()吗? - 另外,如果存在函数间依赖,那么还有哪些函数有此限制(即:
readCharacteristic()、readDescriptor()、requestMtu()...)? - 此外,BluetoothGattServer 和 BluetoothGatt 之间存在相互依赖关系。例如,当我打电话给
BluetoothGattServer.notifyCharacteristicChanged()时,我应该等待BluetoothGattServerCallback.onNotificationSent,然后才能打电话给BluetoothGatt.writeDescriptor()或BluetoothGatt.writeCharacteristic()? (顺便说一句,对谷歌文档onNotificationSent()的赞美是幸运地记录正确。文档说:
当要发送多个通知时,应用程序必须等待 在发送附加信息之前接收此回调 通知。
- 最后遇到所有这些问题 - 我觉得 Android BLE API 的文档不足。还是我错了,并且在某处记录了允许调用序列的方法?如果是的话,你能指点我这些文件吗?如果没有,我们可以通过谷歌打开问题并要求他们在文档中添加一些东西吗?我的意思是它可能没有太多的文字——像
onNotificationSent()这样的一些函数已经被正确记录了。他们只需要将这句话复制到其他函数中。
【问题讨论】:
标签: android bluetooth-lowenergy