问题: 在运行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
答案 0 :(得分:0)
这不是您代码的问题,而是三星 BLE 堆栈的问题。本质上,三星在调用 setMTU 方法时没有正确执行任何操作。允许写入正常工作的方法是等待 133 状态码,等待一段时间让设备断开连接,然后调用 BLE 连接方法并再次尝试写入。调用其他 BLE 方法可能会再次导致失败。逻辑应如下所示:
写入特征。 如果 onCharacteristicWrite 中的 status 为 133,则等待设备断开连接。调用连接方法。连接后,重试写入(可能对进程进行一些指数退避)。