Vit*_*tik 5 android bluetooth-lowenergy
我正在尝试编写BLE Android应用程序.我发现有时当我调用 BluetoothGatt.writeDescriptor()时它会返回false.
我没有在文档中找到任何关于此功能的限制说明.但是堆栈溢出的ppl说我需要等待BluetoothGattCallback.onDescriptorWrite()才能尝试编写另一个描述符.
这是一个回复说BLE忙于 writeDescriptor()而不能做其他写操作.
这是另一个线程说你不能再调用writeCharacteristic()两次.
我的问题是
writeDescriptor()我知道writeDescriptor()在收到之前我不能第二次打电话onDescriptorWrite().但是,onDescriptorWrite()当我想打电话时,我必须等待writeCharacteristic()吗?readCharacteristic(),readDescriptor(),requestMtu()...)?BluetoothGattServer.notifyCharacteristicChanged()我时,我等待BluetoothGattServerCallback.onNotificationSent才能打电话BluetoothGatt.writeDescriptor()或BluetoothGatt.writeCharacteristic()?(BTW对谷歌文档的称赞onNotificationSent()是通过运气记录得当.Doc说:当要发送多个通知时,应用程序必须等待收到此回调才能发送其他通知.
onNotificationSent()arleady正确记录的那样.他们只需要将这句话复制到其他功能.Emi*_*mil 11
文档缺乏信息.但是,您可以阅读源代码以找出规则,其中(当前)如下:
对于每一个BluetoothGatt对象,你只能有一次一个未完成的请求,其中包括requestMtu,readCharacteristic,writeCharacteristic,readDescriptor,writeDescriptor和executeReliableWrite.因此,如果发出读取请求,则需要在发出写入请求之前等待读取响应.虽然他们实现返回错误代码,如果有在正在进行的操作BluetoothGatt.java,他们忘了为做到这一点requestMtu,所以如果你有在同一时间多个请求,其中requestMtu就是其中之一,你会得到随机误差迟早(在这篇文章的最新版本).
所以,是的,每个开发人员都必须手动序列化请求.请注意,蓝牙堆栈实际上有一个请求队列,但它仅限于每个客户端只有一个请求(即BluetoothGatt对象).因此,如果同一电话上的两个应用同时与同一设备通话,您将永远不会出现"忙碌"错误.唯一的例外是,如果您使用Write Without Response,当前的数据流实现非常错误(请参阅https://issuetracker.google.com/issues/37121017,Google似乎忽略了这一点).
您可以在编写特征的同时发送通知,因为服务器和客户端角色是分开的.
关于更新文档,您总是可以尝试在https://issuetracker.google.com上提交问题(但我觉得没有人读到这个),或者,因为Android是开源的,所以向https发送拉取请求:/ /android-review.googlesource.com/更新生成文档的Javadoc.
| 归档时间: |
|
| 查看次数: |
2352 次 |
| 最近记录: |