三星Android 10 BLE MTU> 23问题

时间:2020-04-08 10:38:51

标签: android kotlin bluetooth bluetooth-lowenergy samsung-mobile

问题: 在运行Android 10的Samsung Device(S10e)上设置MTU> 23并将数据写入特性后,连接超时并关闭。

根本原因: 超时的原因是电话硬件实际上没有发送任何东西...因此终端设备没有响应(确认)。

我怎么知道这不是终端设备问题: 在其他设备(像素)上不会发生此问题,而在运行Android 9的S10上也不会发生此问题。

详细信息: 我们在BluetoothGatt中使用requestMtu将MTU更改为185,然后onMtuChanged返回的mtu值为185,状态为GATT_SUCCESS。 当我们发送更长的消息(约40个字节)时,BluetoothGatt的writeCharacteristic的返回值为true,但是onCharacteristicWrite回调将为我们提供133状态代码,而不是GATT_SUCCESS。然后设备将断开连接。

为什么我需要更大的MTU : 我们期望能够使用更大的MTU,以便我们可以将数据发送到终端设备以提供Wi-Fi凭据。最终设备的构造是一次只能接受所有凭据(假设MTU> 23不会成为问题。因此,我们有客户无法使用的现场设备。

问题: 有什么想法或解决方法可以尝试吗?

电话信息: 三星S10E 操作系统:Android 10 Android安全补丁程序:2020年3月1日

最终设备信息: ESP32

1 个答案:

答案 0 :(得分:0)

这不是您代码的问题,而是三星 BLE 堆栈的问题。本质上,三星在调用 setMTU 方法时没有正确执行任何操作。允许写入正常工作的方法是等待 133 状态码,等待一段时间让设备断开连接,然后调用 BLE 连接方法并再次尝试写入。调用其他 BLE 方法可能会再次导致失败。逻辑应如下所示:

写入特征。 如果 onCharacteristicWrite 中的 status 为 133,则等待设备断开连接。调用连接方法。连接后,重试写入(可能对进程进行一些指数退避)。