在Android 4.3-4.4上请求具有蓝牙低功耗连接的MTU(API 18-20)

dbr*_*bro 5 android bluetooth bluetooth-lowenergy

我有蓝牙低功耗应用程序,要求MTU大小超过默认的23个字节.

虽然Android 在API 21中引入了BluetoothGatt#requestMTU(),但是有没有办法,包括使用私有API来完成这个预先的API 21?

ge0*_*0rg 5

如果您控制外围设备,则可以从外围设备发出MTU请求(ATT_OP_MTU_REQ,操作码0x02)。如果外围设备有要求,Android可以支持更大的GATT MTU(更新:最大值为517个字节),并将愉快地发送一个ATT_OP_MTU_RESP消息。

唯一棘手的事情是MTU交换可能不会与零散的读/写重叠。一种解决方法是客户端在给定的握手时间进行睡眠,外设在该时间发送MTU请求。另一个可能的解决方法是触发MTU交换的“魔术”特性上的READ或WRITE。

但是,随着MTU的增加,我更经常收到Status = 133错误,这可能是由较大数据包的较高数据包错误率引起的吗?