Android 14默认MTU及相关注意事项

问题描述 投票:0回答:1

Android 14 中默认 MTU 是否更改为 517 字节?如果是这样,这将导致与硬件、蓝牙堆栈、MTU 功能以及函数 requestMtu() 的正确使用相关的问题。

gatt mtu
1个回答
1
投票

正如您在问题中所描述的,BluetoothGatt 自 API 21 起提供了 requestMtu 方法。但是,这在 Android 14 及更高版本中是不可能的

第一个请求 MTU 的 GATT 客户端将 MTU 设置为 517

从 Android 14 开始,Android 蓝牙堆栈更加严格遵守 蓝牙核心规范 5.2 版和 BLE 请求 当第一个 GATT 客户端使用以下命令请求 MTU 时,ATT MTU 为 517 字节 BluetoothGatt#requestMtu(int) API,并忽略所有后续 该 ACL 连接上的 MTU 请求。

解决方法包括更改固件:

您的外围设备应响应 Android 设备的 MTU 请求具有合理的值,可以由 外围。最终协商的价值将是最小的 Android 请求的值和远程提供的值(即

min(517, remoteMtu)

...或手动发送适当大小的数据包:

  • 或者,根据外设已知支持值与接收到的 MTU 更改之间的最小值来限制 GATT 特征写入
    • 提醒您应将标头支持的大小减少 5 个字节
    • 例如:arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
© www.soinside.com 2019 - 2024. All rights reserved.