小程序
小游戏
企业微信
微信支付
扫描小程序码分享
wx.getBLEMTU为什么获取的mtu只有20多,原生APP可以获取到240,是有什么限制吗,而且文档说MTU值会发生变化,这样岂不是分包的时候要随时调整包大小
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
IOS系统下测试可以发送到240,Android只有每包20才能稳定发送
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
const getMaxBLEMTU = async (deviceId, mtu, type) => {
try {
await wx.setBLEMTU({
deviceId: deviceId,
mtu: mtu,
});
// 如果上一次错误,获取成功后直接返回结果
if (type === 'error') {
return mtu;
} else {
return getMaxBLEMTU(deviceId, mtu + 20, 'success');
}
} catch (error) {
// 如果是 success 则返回上次成功沟通的值
if (type === 'success') {
return mtu - 20;
} else if (mtu <= 20) {
return 20;
return getMaxBLEMTU(deviceId, mtu - 20, 'error');
};
// 调用
const mtu = await getMaxBLEMTU('deviceId', 240);
let mtu = await getMaxBLEMTU(deviceId, 240); console.log('最大MTU值为:', mtu); wx.getBLEMTU({ deviceId:deviceId, success (res) { console.log(res.mtu) } })
加了协商MTU之后,上面打印出来是20,下面res.mtu打印出来是203,实际发送也确实能发比较长的,
但是几乎总是会导致蓝牙断开,
另外监听部分只能监听到200字节长度数据,
你好,麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点(具体到分钟)
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
IOS系统下测试可以发送到240,Android只有每包20才能稳定发送
const getMaxBLEMTU = async (deviceId, mtu, type) => {
try {
await wx.setBLEMTU({
deviceId: deviceId,
mtu: mtu,
});
// 如果上一次错误,获取成功后直接返回结果
if (type === 'error') {
return mtu;
} else {
return getMaxBLEMTU(deviceId, mtu + 20, 'success');
}
} catch (error) {
// 如果是 success 则返回上次成功沟通的值
if (type === 'success') {
return mtu - 20;
} else if (mtu <= 20) {
return 20;
}
return getMaxBLEMTU(deviceId, mtu - 20, 'error');
}
};
// 调用
const mtu = await getMaxBLEMTU('deviceId', 240);
let mtu = await getMaxBLEMTU(deviceId, 240); console.log('最大MTU值为:', mtu); wx.getBLEMTU({ deviceId:deviceId, success (res) { console.log(res.mtu) } })
加了协商MTU之后,上面打印出来是20,下面res.mtu打印出来是203,实际发送也确实能发比较长的,
但是几乎总是会导致蓝牙断开,
另外监听部分只能监听到200字节长度数据,
203可能就是我的蓝牙设备的上限了,每个设备应该不一样,
// 设置MTU
wx.setBLEMTU({
deviceId: deviceId,
mtu:203,
success: function(res) {
console.log('设置MTU成功'+res.mtu);
},
fail: function() {
console.log('设置MTU失败');
}
})
你好,麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点(具体到分钟)
微信号:li1758238259
获取到的只有23,实际应该有240
getMtu能拿到的值依赖于协商结果,如果建立连接时对端没有主动先给个mtu的值,会默认认为是20多那个值,这种情况要开发者自行用setMtu去协商探测的