uni-app 【报Bug】 uni.setBLEMTU 设置传输单元为512,返回成功后还是只能接收到20个字节。

uni-app 【报Bug】 uni.setBLEMTU 设置传输单元为512,返回成功后还是只能接收到20个字节。

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 11
HBuilderX类型 正式
HBuilderX版本 3.99
手机系统 Android
手机系统版本 Android 13
手机厂商 华为
手机机型 mate 50
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

uni.setBLEMTU({
deviceId: devices.deviceId,
mtu: 512,
success(res) {
console.log("设置最大值成功", res)
}
})

预期结果:

设备可以接收超过20字节的数据

实际结果:

实际上无法接收超过20字节的数据

bug描述:

uni.setBLEMTU 设置传输单元为512,返回成功后还是只能接收到20个字节。


更多关于uni-app 【报Bug】 uni.setBLEMTU 设置传输单元为512,返回成功后还是只能接收到20个字节。的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

不知道你的蓝牙设备支持不支持设置 或者能不能正确处理MTU 大小

更多关于uni-app 【报Bug】 uni.setBLEMTU 设置传输单元为512,返回成功后还是只能接收到20个字节。的实战教程也可以访问 https://www.itying.com/category-93-b0.html


使用安卓蓝牙测试工具试过了,可以正常设置MTU大小。和发送超过20字节的数据

回复 1***@qq.com: 额,我们当时也遇到过,但是我们别的部门说设备不支持设置超过20的,解释有点牵强,后来是分包传的

回复 套马杆的套子:请问解决了吗? 我这边提示成功,但实际不生效,其他的安卓手机可以,有些华为手机不行

解决了吗,我也遇到这个问题了

请问解决了吗

在使用 uni.setBLEMTU 设置蓝牙传输单元(MTU)时,虽然返回了成功,但实际接收到的数据仍然只有20个字节,这可能是由于以下几个原因导致的:

1. 设备或系统限制

  • 设备限制:某些蓝牙设备可能不支持较大的MTU,即使你设置了较大的MTU,设备仍然只能处理较小的数据包。
  • 系统限制:不同操作系统对蓝牙MTU的支持可能有所不同。例如,某些Android版本或iOS版本可能对MTU有默认限制。

2. 蓝牙协议限制

  • BLE协议:BLE(Bluetooth Low Energy)协议本身对数据包大小有一定的限制。虽然理论上可以通过 setBLEMTU 设置较大的MTU,但实际传输时可能仍然受到协议的限制。

3. 服务端限制

  • 服务端MTU:即使客户端设置了较大的MTU,如果服务端(蓝牙设备)不支持较大的MTU,实际传输的数据包大小仍然会受到限制。

4. API实现问题

  • API实现uni.setBLEMTU 在某些平台或设备上可能没有完全实现,或者存在bug,导致设置MTU后实际传输的数据包大小没有变化。

5. 调试和验证

  • 调试:你可以通过调试工具(如nRF Connect)查看实际的MTU值,确认是否真的设置成功。
  • 日志:查看设备的日志,确认是否有相关的错误或警告信息。

解决方案

  1. 检查设备和系统支持:确认你的设备和操作系统是否支持较大的MTU。
  2. 与服务端协商:确保服务端(蓝牙设备)也支持较大的MTU。
  3. 使用调试工具:使用蓝牙调试工具(如nRF Connect)查看实际的MTU值。
  4. 分片传输:如果无法设置较大的MTU,可以考虑将数据分片传输,每次传输较小的数据包。

示例代码

uni.setBLEMTU({
  deviceId: deviceId,
  mtu: 512,
  success: (res) => {
    console.log('MTU设置成功', res);
    // 检查实际MTU值
    uni.getBLEMTU({
      deviceId: deviceId,
      success: (res) => {
        console.log('实际MTU值', res.mtu);
      },
      fail: (err) => {
        console.error('获取MTU失败', err);
      }
    });
  },
  fail: (err) => {
    console.error('MTU设置失败', err);
  }
});
回到顶部