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字节的数据
回复 套马杆的套子:请问解决了吗? 我这边提示成功,但实际不生效,其他的安卓手机可以,有些华为手机不行
解决了吗,我也遇到这个问题了
请问解决了吗
在使用 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值,确认是否真的设置成功。
- 日志:查看设备的日志,确认是否有相关的错误或警告信息。
解决方案
- 检查设备和系统支持:确认你的设备和操作系统是否支持较大的MTU。
- 与服务端协商:确保服务端(蓝牙设备)也支持较大的MTU。
- 使用调试工具:使用蓝牙调试工具(如nRF Connect)查看实际的MTU值。
- 分片传输:如果无法设置较大的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);
}
});


