在 Android 4.3-4.4 (API 18-20) 上通过低功耗蓝牙连接请求 MTU
Requesting MTU with Bluetooth Low Energy connection on Android 4.3-4.4 (API 18-20)
我有一个低功耗蓝牙应用程序,它要求 MTU 大小超过默认的 23 字节。
虽然Android在API21中引入了BluetoothGatt#requestMTU(),有没有任何方式,包括使用私有APIs , 要完成这个 pre API 21?
如果您可以控制外围设备,则可以从外围设备发出 MTU 请求(ATT_OP_MTU_REQ,操作码 0x02)。 Android 具有更大的 GATT MTU(更新:517 字节是最大值),如果外设请求,并且会很乐意发送相应的 ATT_OP_MTU_RESP。
唯一棘手的是 MTU 交换可能不会与分段 read/write 重叠。一种解决方法可能是客户端在给定的握手时间休眠,此时外围设备发送 MTU 请求。另一种可能的解决方法是在触发 MTU 交换的 "magic" 特征上进行读取或写入。
但是,随着 MTU 的增加,我更经常收到 Status=133 错误,这可能是由于数据包越大,数据包错误率越高?
我有一个低功耗蓝牙应用程序,它要求 MTU 大小超过默认的 23 字节。
虽然Android在API21中引入了BluetoothGatt#requestMTU(),有没有任何方式,包括使用私有APIs , 要完成这个 pre API 21?
如果您可以控制外围设备,则可以从外围设备发出 MTU 请求(ATT_OP_MTU_REQ,操作码 0x02)。 Android 具有更大的 GATT MTU(更新:517 字节是最大值),如果外设请求,并且会很乐意发送相应的 ATT_OP_MTU_RESP。
唯一棘手的是 MTU 交换可能不会与分段 read/write 重叠。一种解决方法可能是客户端在给定的握手时间休眠,此时外围设备发送 MTU 请求。另一种可能的解决方法是在触发 MTU 交换的 "magic" 特征上进行读取或写入。
但是,随着 MTU 的增加,我更经常收到 Status=133 错误,这可能是由于数据包越大,数据包错误率越高?