我有蓝牙低功耗应用程序,要求MTU大小超过默认的23个字节。
虽然Android在API 21中引入了BluetoothGatt#requestMTU(),但是否有任何方式(包括使用私有API)来完成此API 21之前?
答案 0 :(得分:5)
如果您可以控制外围设备,则可以从外围设备发出MTU请求(ATT_OP_MTU_REQ,操作码0x02)。如果外围设备请求,Android可以使用更大的GATT MTU(更新:517字节是最大值),并且很乐意发送相应的ATT_OP_MTU_RESP。
唯一棘手的问题是MTU交换可能不会与碎片读/写重叠。一种解决方法可能是在握手的给定时间进行客户端休眠,其中外围设备发送MTU请求。另一种可能的解决方法是对#34;魔法"进行读取或写入。触发MTU交换的特征。
然而,随着MTU的增加,我更经常收到Status = 133错误,这可能是由于较大的数据包错误率较高造成的?