uni-app中uni.setBLEMTU功能无法生效

uni-app中uni.setBLEMTU功能无法生效

开发环境 版本号 项目创建方式
Windows win HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.1.15

手机系统:Android

手机系统版本号:Android 10

手机厂商:小米

手机机型:红米K30

页面类型:vue

打包方式:云端

操作步骤:
createConnectdo: function(deviceid) {
let self = this
uni.showLoading({
title: "正在链接..."
})
uni.createBLEConnection({
deviceId: deviceid,
success: function(res) {
console.log(res)
uni.setBLEMTU({
deviceId: deviceid,
mtu: 312,
success: (res) => {
console.log(res)
},
fail: (error) => {
console.log(error)
}
})
self.stopBluetoothDevicesDiscovery()
self.getBluetoothDevicesServices(deviceid)
// self.getBledeviceCharateristics(self.blueList[index])  
},
fail: function(res) {
console.log("error", res)
uni.closeBLEConnection({
deviceId: deviceid,
success: function(res) {
self.createConnectdo(deviceid)
}
})
}
})
},
预期结果:
设置uni.setBLEMTU 后可以传输大于20个字节的数据
实际结果:
只能发送20个字节的数据
bug描述:
uni.setBLEMTU 根本不生效 这个问题到底怎么解决? 请官方能尽快看看这个函数吗

更多关于uni-app中uni.setBLEMTU功能无法生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

我链接蓝牙成功后加了十秒延迟,返回成功了,但是实际还是没生效,发送超过20个字节的数据硬件收到还是20个字节,手机上的蓝牙调试助手是没问题的

更多关于uni-app中uni.setBLEMTU功能无法生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


解决了吗?有遇到这个问题了吗?

连接成功后不要立即调, 加个2s延时就好了

连接成功后,延迟一秒调用 setTimeout(function(){ uni.setBLEMTU({ deviceId:that.deviceId, mtu:30, success(res) { console.log(‘设置成功’, res) }, fail(err) { console.log(‘设置失败’, err) } }) },1000)

连接成功后,延迟一秒调用 setTimeout(function(){
uni.setBLEMTU({
deviceId:that.deviceId,
mtu:30,
success(res) {
console.log(‘设置成功’, res)
},
fail(err) {
console.log(‘设置失败’, err)
}
})
},1000)

为什么我加了延迟也不行,还是报错:setBLEMTU:fail:internal error
// 蓝牙MTU设置
setBLEMTU(deviceId) {

setTimeout(() => {  
  uni.setBLEMTU({  
    deviceId: deviceId,  
    mtu: 512,  
    success(res) {  
      console.log("mtu设置成功!ccccc", res);  
      //console.log(res);  
    },  
    fail(err) {  
      console.log("mtu设置失败:ccccc", err);  
      //console.log(err);  
      var ret = '{"code":1,"msg": "蓝牙MTU设置失败"}';  
      return ret;  
    },  
  })  
}, 2000)  

}

这个时间并不是固定两秒,也可以适当的延长点,还有就是iOS的没有这个

因为512不能生效,测试下来最大只能设置为247

在uni-app中,uni.setBLEMTU功能在某些Android设备上可能无法生效,这通常与设备硬件或系统限制有关。根据您提供的信息,代码逻辑正确,但红米K30(Android 10)可能不支持自定义MTU大小,或系统底层限制了MTU的修改。

首先,检查uni.setBLEMTU的成功回调输出,确认是否返回了实际设置的MTU值。如果成功回调被触发但MTU未改变,说明设备或蓝牙模块不支持该操作。许多Android设备对MTU有固定限制,无法通过API调整。

其次,尝试在连接蓝牙设备后延迟调用uni.setBLEMTU,因为某些设备需要在连接完全建立后才能处理MTU请求。示例修改:

uni.createBLEConnection({
  deviceId: deviceid,
  success: function(res) {
    setTimeout(() => {
      uni.setBLEMTU({
        deviceId: deviceid,
        mtu: 312,
        success: (res) => {
          console.log('MTU设置结果:', res);
        },
        fail: (error) => {
          console.error('MTU设置失败:', error);
        }
      });
    }, 500);
    // 其他操作...
  }
});
回到顶部