在Ble中,我可以传输大于MTU的数据包吗?

时间:2019-06-13 09:38:36

标签: android bluetooth-lowenergy

假设我要通过ble传输一些数据(100字节),而MTU是50字节,我可以制作一个100字节的数据包并只发送一次吗?

在我的测试中,数据被截断了。那么,这是否意味着我们必须通过应用程序手动对数据进行打包,然后将它们一个接一个地发送出去,然后在另一端手动重新打包呢?

android是否有任何API可以自动启用子包和重新打包?

        gatt.requestMtu(100);
        @Override
        public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
            super.onMtuChanged(gatt, mtu, status);
            //// here the mtu is 50
        }

1 个答案:

答案 0 :(得分:1)

在Android或其他高级操作系统上开发BLE应用程序时,实际上可以忽略MTU。最好将其留给系统来协商配置。

但是,这并不意味着您可以发送任意长度的数据。借助BLE,数据往返于蓝牙服务特性之间传输,并且这些特性具有您不能超过的最大长度以及权限和访问控制标志。

要查找最大数据包长度,请获取要写入的特征的大小。理想情况下,具有此特征的开发人员应确保特征长度等于或等于设备MTU的倍数。

唯一的例外是如果您的特征用于通知(而不是读或写)。在这种情况下,特征的最大长度等于设备的MTU。