假设我要通过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
}
答案 0 :(得分:1)
在Android或其他高级操作系统上开发BLE应用程序时,实际上可以忽略MTU。最好将其留给系统来协商配置。
但是,这并不意味着您可以发送任意长度的数据。借助BLE,数据往返于蓝牙服务特性之间传输,并且这些特性具有您不能超过的最大长度以及权限和访问控制标志。
要查找最大数据包长度,请获取要写入的特征的大小。理想情况下,具有此特征的开发人员应确保特征长度等于或等于设备MTU的倍数。
唯一的例外是如果您的特征用于通知(而不是读或写)。在这种情况下,特征的最大长度等于设备的MTU。