Android 14 对默认蓝牙 MTU 大小进行了重大更改,这破坏了我们的蓝牙设备固件。以前设置为 23 字节,但现在设置为 517 字节。 MTU 可以协商为更低的值吗?据推测,这将是在连接时刻(onConnectionStateChange,连接状态)。我尝试使用函数 requestMtu(Int) 协商更改 MTU 大小,但没有成功。
正如您在问题中所描述的,BluetoothGatt 自 API 21 起提供了 requestMtu 方法:
public boolean requestMtu (int mtu)
请求用于给定连接的 MTU 大小。
执行写请求操作时(写无响应), 发送的数据被截断为 MTU 大小。这个功能可以用 请求更大的 MTU 大小以便能够一次发送更多数据。
其他 StackOverflow 答案都提到了此方法调用 需要一些技巧,例如使用多次尝试并注意其他方法(如
discoverServices
)的调用顺序。