小程序
小游戏
企业微信
微信支付
扫描小程序码分享
https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEMTUChange.html
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
有用,它会返回手机支持的最大单元(我的猜想),不知道咱们两个说的是不是一个意思,我是这么做的。
wx.onBLEMTUChange(function (res) { console.log('bluetooth mtu is', res.mtu) wx.setBLEMTU({ deviceId: device.deviceId, mtu: res.mtu, success(mtu) { console.log('设置最大传输单元成功 :', mtu) }, fail(error) { console.warn('设置最大传输单元失败!', error) } }); }) // 协商设置蓝牙低功耗的最大传输单元 (Maximum Transmission Unit, MTU)。需在 wx.createBLEConnection 调用成功后调用。仅安卓系统 5.1 以上版本有效,iOS 因系统限制不支持。 wx.setBLEMTU({ deviceId: device.deviceId, mtu: 400, success(mtu) { console.log('设置最大传输单元成功 :', mtu) }, fail(error) { console.warn('设置最大传输单元失败!', error) } });
先走的:onBLEMTUChange,返回 247(我手机小米 13),然后再走的 setBLEMTU 报错,最后走的 onBLEMTUChange 里的 setBLEMTU 成功。
又完善了一下代码:
/** * 协商设置蓝牙低功耗的最大传输单元 (Maximum Transmission Unit, MTU)。需在 wx.createBLEConnection 调用成功后调用。仅安卓系统 5.1 以上版本有效,iOS 因系统限制不* 支持。 * setBLEMTU 和 onBLEMTUChange 回调流程:先走 onBLEMTUChange 返回 247(我手机小米 13),然后再走的 setBLEMTU 报错,最后走的 onBLEMTUChange 里的 setBLEMTU 成功。 * 注:onBLEMTUChange 先注册相当于监听函数,当 setBLEMTU 执行后才走 callBack * @param {String} deviceId 设备id * @param {Number} expectedValue 期望值 */ function setBLEMTU(deviceId, expectedValue) { function _setBLEMTU(mtu) { wx.setBLEMTU({ deviceId, mtu, success(mtu) { console.log('setBLEMTU 设置最大传输单元成功 :', mtu) }, fail(error) { console.warn('setBLEMTU 设置最大传输单元失败!', error) } }) } wx.onBLEMTUChange(function (res) { console.log('onBLEMTUChange mtu is', res.mtu) // 每包最大数。这个 res.mtu 应该是当前设备的最大值,我尝试,小米 13 是 247,当我传 248 就会设置报错。 packageSize = res.mtu; // 期望值设置不成功就用 onBLEMTUChange 返回的最大值?设置 _setBLEMTU if (res.mtu !== expectedValue) { _setBLEMTU(res.mtu) } }); // 先尝试设置期望值 _setBLEMTU(expectedValue); } // test 1 setBLEMTU(500); // 结果 1、先 onBLEMTUChange 监听到,返回 res.mtu ,报 "setBLEMTU 设置最大传输单元失败!",再报 "setBLEMTU 设置最大传输单元成功 :" // test 2 setBLEMTU(247); // 结果 1、先 onBLEMTUChange 监听到,返回 res.mtu ,报 "setBLEMTU 设置最大传输单元成功 :"
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
wx.createBLEConnection({
deviceId: item.deviceId,
timeout: 15000,
success: (res) => {
console.log('蓝牙连接成功');
wx.onBLEMTUChange(function (re) {
var mtu = re.mtu
console.log("mtu:"+mtu);
if(mtu <= 23 )
wx.setBLEMTU({
mtu: mtu + 20,
success(){
先setBLUMTU才会监听回调。但好奇怪我最大136,但只能传输128字节,超过128对方根本接收不到,就算传输额外需要3个字节,那也还剩5个字节。猜测是不是报头信息不能存放在131字节以外,那这种怎么解决啊
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
有用,它会返回手机支持的最大单元(我的猜想),不知道咱们两个说的是不是一个意思,我是这么做的。
wx.onBLEMTUChange(function (res) { console.log('bluetooth mtu is', res.mtu) wx.setBLEMTU({ deviceId: device.deviceId, mtu: res.mtu, success(mtu) { console.log('设置最大传输单元成功 :', mtu) }, fail(error) { console.warn('设置最大传输单元失败!', error) } }); }) // 协商设置蓝牙低功耗的最大传输单元 (Maximum Transmission Unit, MTU)。需在 wx.createBLEConnection 调用成功后调用。仅安卓系统 5.1 以上版本有效,iOS 因系统限制不支持。 wx.setBLEMTU({ deviceId: device.deviceId, mtu: 400, success(mtu) { console.log('设置最大传输单元成功 :', mtu) }, fail(error) { console.warn('设置最大传输单元失败!', error) } });
先走的:onBLEMTUChange,返回 247(我手机小米 13),然后再走的 setBLEMTU 报错,最后走的 onBLEMTUChange 里的 setBLEMTU 成功。
又完善了一下代码:
/** * 协商设置蓝牙低功耗的最大传输单元 (Maximum Transmission Unit, MTU)。需在 wx.createBLEConnection 调用成功后调用。仅安卓系统 5.1 以上版本有效,iOS 因系统限制不* 支持。 * setBLEMTU 和 onBLEMTUChange 回调流程:先走 onBLEMTUChange 返回 247(我手机小米 13),然后再走的 setBLEMTU 报错,最后走的 onBLEMTUChange 里的 setBLEMTU 成功。 * 注:onBLEMTUChange 先注册相当于监听函数,当 setBLEMTU 执行后才走 callBack * @param {String} deviceId 设备id * @param {Number} expectedValue 期望值 */ function setBLEMTU(deviceId, expectedValue) { function _setBLEMTU(mtu) { wx.setBLEMTU({ deviceId, mtu, success(mtu) { console.log('setBLEMTU 设置最大传输单元成功 :', mtu) }, fail(error) { console.warn('setBLEMTU 设置最大传输单元失败!', error) } }) } wx.onBLEMTUChange(function (res) { console.log('onBLEMTUChange mtu is', res.mtu) // 每包最大数。这个 res.mtu 应该是当前设备的最大值,我尝试,小米 13 是 247,当我传 248 就会设置报错。 packageSize = res.mtu; // 期望值设置不成功就用 onBLEMTUChange 返回的最大值?设置 _setBLEMTU if (res.mtu !== expectedValue) { _setBLEMTU(res.mtu) } }); // 先尝试设置期望值 _setBLEMTU(expectedValue); } // test 1 setBLEMTU(500); // 结果 1、先 onBLEMTUChange 监听到,返回 res.mtu ,报 "setBLEMTU 设置最大传输单元失败!",再报 "setBLEMTU 设置最大传输单元成功 :" // test 2 setBLEMTU(247); // 结果 1、先 onBLEMTUChange 监听到,返回 res.mtu ,报 "setBLEMTU 设置最大传输单元成功 :"
wx.createBLEConnection({
deviceId: item.deviceId,
timeout: 15000,
success: (res) => {
console.log('蓝牙连接成功');
wx.onBLEMTUChange(function (re) {
var mtu = re.mtu
console.log("mtu:"+mtu);
if(mtu <= 23 )
wx.setBLEMTU({
deviceId: item.deviceId,
mtu: mtu + 20,
success(){
先setBLUMTU才会监听回调。但好奇怪我最大136,但只能传输128字节,超过128对方根本接收不到,就算传输额外需要3个字节,那也还剩5个字节。猜测是不是报头信息不能存放在131字节以外,那这种怎么解决啊