蓝牙低能耗-安卓4.4 BLE指示数据超过20字节



我有一个关于android 4.4蓝牙低能耗的问题。

我有一个带有UART Rx引脚的BLE加密狗。我可以将字节数据从Rx引脚发送到BLE加密狗,BLE加密猫会通过指示将数据发送到蓝牙主机设备。

所以我有一个Rx特征值,它的性质是指示。我向Rx特性发送了大约80个字节的数据,但通过一次回调函数onCharacteristicChanged只能获得20个字节。

但我用iPadmini来表示这个特征值,它接收到4个数据包,其中一个是20字节的数据,这似乎是正确的。

如何在Android回调功能中接收像iOS一样的80字节数据?

试着谈判一个更大的关贸总协定MTU。默认值为23字节。(G)ATT协议每个通知/指示占用3个字节的报头。因此,默认情况下剩下20-3=20个字节。

在iOS 8上,iOS允许的最大MTU为158字节。我不确定安卓系统允许什么。

我遇到了完全相同的问题——20字节——这是对指示和通知的限制。它是在规范中定义的,但我还没有找到它。

如果您的特征没有使用指示或通知,则此约束不适用,并且您的所有数据都将以MTU-5的块形式发送,请参阅BT4.0规范第3.4.6.1节。

数据以每个20字节的块发送。因此,如果你想接收全部80个字节,那么把数据分成20个字节的块,然后循环发送。参考安卓系统:发送数据>BLE提供20字节以供澄清。

记住在循环中添加Thread.sleep(200),这样特性就不会被覆盖。

最新更新