Android Ble MTU 大小

hun*_*gly 6 android mtu bluetooth-lowenergy

BluetoothGatt.requestMtu(512)我在我的 Android 应用程序中使用。第一次运行良好,但在 Mtu 自动更改为 23(默认)之后

我不知道是什么问题......

这是一个日志

`D/BluetoothGatt: setCharacteristicNotification() - uuid: 0000fff1-0000-1000-8000-00805f9b34fb enable: true
D/BluetoothGatt: configureMTU() - device: 74:F0:7D:C0:CB:68 mtu: 512
D/BluetoothGatt: onConfigureMTU() - Device=74:F0:7D:C0:CB:68 mtu=23 status=0
D/BluetoothGatt: discoverServices() - device: 74:F0:7D:C0:CB:68
D/BluetoothGatt: onSearchComplete() = Device=74:F0:7D:C0:CB:68 Status=0
I/gattSuccess: gattSuccess`
Run Code Online (Sandbox Code Playgroud)

这是在 onMtuChanged() 中,所以它可以无限循环

You*_*eed 8

正如 M. Kotzjan 指出的,这与其他设备支持的 MTU 有关。来自蓝牙规范 v5.2,第 3 卷,G 部分,第 4.3.1 节(交换 MTU):-

当客户端支持的值大于属性协议的默认 ATT_MTU 时,客户端使用此子过程将 ATT_MTU 设置为两个设备都可以支持的最大可能值。该子过程只能在连接期间启动一次。

换句话说,如果您请求 MTU 512,而远程设备回复 23(最小 MTU 值),则连接的 MTU 将为 23。如果您请求 512,远程设备回复 100,则连接的 MTU 将为 100如果您请求 200,而远程设备回复 512,则连接的 MTU 将为 200。

请查看以下链接以获取更多信息:-