Android/Java - android 方面是否有必要请求 MTU 更新?
Android/Java - Is it necessary on android's side to request a MTU update?
我已经为BLE设备编写了固件,并且在接收数据包时需要40字节。
我的问题是:我的android设备是否需要接收事件"onMtuChanged()"才能发送超过23个字节?换句话说,这个回调是否允许我的设备发送超过 23 个字节?
其次,有没有办法让我在内部设置 android 内的 MTU 大小,这样我就不必请求 MTU 交换?我的 BLE 设备在接收数据(网状网络的一部分)后断开连接,因此我每次发送数据时都必须交换 MTU 请求。它大大减慢了传输速度。
要允许传输超过默认 MTU,必须协商新的 MTU。根据规范,禁止在未交换更大 MTU 的情况下发送更大的数据包。您可以从 Android 端(正如您已经发现的那样)或从外围端(在这种情况下 Android 不会给您任何回调)启动 MTU 更改。
如果您不喜欢执行此操作所需的额外往返,为什么不发送两个 Write Without Response 数据包?这将适合 40 个字节,并且可以在单个连接事件期间发送。
允许发送超过 23 个字节。
您可以使用代码段:
gatt.requestMtu(MTU);//MTU is that you want to send bytes
onMtuChanged(BluetoothGatt, int, int)
回调将指示此操作是否成功。
如果你不是每次都交换 MTU 请求,你应该通过官方方式重新连接,这样每次你想再次发送字节时保持 gatt
而不是 null
。
我已经为BLE设备编写了固件,并且在接收数据包时需要40字节。
我的问题是:我的android设备是否需要接收事件"onMtuChanged()"才能发送超过23个字节?换句话说,这个回调是否允许我的设备发送超过 23 个字节?
其次,有没有办法让我在内部设置 android 内的 MTU 大小,这样我就不必请求 MTU 交换?我的 BLE 设备在接收数据(网状网络的一部分)后断开连接,因此我每次发送数据时都必须交换 MTU 请求。它大大减慢了传输速度。
要允许传输超过默认 MTU,必须协商新的 MTU。根据规范,禁止在未交换更大 MTU 的情况下发送更大的数据包。您可以从 Android 端(正如您已经发现的那样)或从外围端(在这种情况下 Android 不会给您任何回调)启动 MTU 更改。
如果您不喜欢执行此操作所需的额外往返,为什么不发送两个 Write Without Response 数据包?这将适合 40 个字节,并且可以在单个连接事件期间发送。
允许发送超过 23 个字节。
您可以使用代码段:
gatt.requestMtu(MTU);//MTU is that you want to send bytes
onMtuChanged(BluetoothGatt, int, int)
回调将指示此操作是否成功。
如果你不是每次都交换 MTU 请求,你应该通过官方方式重新连接,这样每次你想再次发送字节时保持 gatt
而不是 null
。