收藏
回答

wx.getBLEMTU为什么获取的mtu只有20多,原生APP可以获取到240

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.getBLEMTU 微信安卓客户端 8.0.14 2.20.1

wx.getBLEMTU为什么获取的mtu只有20多,原生APP可以获取到240,是有什么限制吗,而且文档说MTU值会发生变化,这样岂不是分包的时候要随时调整包大小

回答关注问题邀请回答
收藏

3 个回答

  • Victor
    Victor
    2021-10-25

    IOS系统下测试可以发送到240,Android只有每包20才能稳定发送

    2021-10-25
    有用 1
    回复 3
    • Victor
      Victor
      2021-10-25
      在每次 createBLEConnection 成功之后,执行如下函数获取道最大mtu值,根据这个mtu值进行分包发送可以成功,亲测有效,使用官方 getBLEMTU 获取不到硬件mtu最大值,要给个mtu初始值,我们的目前是240
      2021-10-25
      1
      回复
    • 古尘
      古尘
      2021-11-10回复Victor
      安卓也可以强行设置这么大妈
      2021-11-10
      回复
    • Victor
      Victor
      2021-11-10回复古尘
      只要硬件设备支持就可以
      2021-11-10
      回复
  • 山间雾
    山间雾
    2023-12-01
    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字节长度数据,


    2023-12-01
    有用
    回复 1
    • 山间雾
      山间雾
      2023-12-01
      尝试了直接设置MTU,就可以成功发送和监听到了,只是出现了1次丢失了2个字符。


      203可能就是我的蓝牙设备的上限了,每个设备应该不一样,


      // 设置MTU
              wx.setBLEMTU({
                deviceId: deviceId,
                mtu:203,
                success: function(res) {
                  console.log('设置MTU成功'+res.mtu);
                },
                fail: function() {
                  console.log('设置MTU失败');
                }
              })
      2023-12-01
      回复
  • Cjiang
    Cjiang
    2021-10-26

    你好,麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点(具体到分钟)

    2021-10-26
    有用
    回复 4
    • Victor
      Victor
      2021-10-27
      2021/10/27 10:10:00 - 2021/10/27 10:10:40
      微信号:li1758238259
      获取到的只有23,实际应该有240
      2021-10-27
      1
      回复
    • Cjiang
      Cjiang
      2021-10-27回复Victor
      日志10:09分的时候其实是有发setMtu去协商探测能达到的mtu上限的,最后试出来应该是247;
      getMtu能拿到的值依赖于协商结果,如果建立连接时对端没有主动先给个mtu的值,会默认认为是20多那个值,这种情况要开发者自行用setMtu去协商探测的
      2021-10-27
      回复
    • Victor
      Victor
      2021-10-27
      帮忙看下,因为ios不支持设置MTU,现在ios分包,每包固定240,第一次下发大概率失败,但是writeBLECharacteristicValue并没有报错,就是收不到onBLECharacteristicValueChange回调,第二次发送同一设备99%能成功,可以收到onBLECharacteristicValueChange回调。日志已上传:2021/10/27 16:06:30 - 2021/10/27 16:07:00
      2021-10-27
      1
      回复
    • Mr. Raindrop
      Mr. Raindrop
      2023-02-28回复Victor
      你好,请问蓝牙第一次下发数据失败收不到onBLECharacteristicValueChange回调,第二次下发才会成功的问题你最后是怎么解决的,是什么问题导致
      2023-02-28
      回复
登录 后发表内容