E企盈小程序营销工具技术服务商 热线:4006-838-530

小程序蓝牙发送数据超过20个字节解决方案

E企盈小程序直播系统

问题:做小程序项目的时候碰到往蓝牙设备写数据超过20个字节,ios没有返回结果解答:在社区和网上搜了一圈都说要分包发送但是没有完整的示例,以下代码是我亲测有效的function writeTest(msg){  let buffer = hexStringToArrayBuffer(msg);  let pos = 0;  let bytes = buffer.byteLength;  console.log(“bytes”, bytes)  while (bytes 0) {    let tmpBuffer;    if (bytes 20) {      return delay(0.25).then(() = {        tmpBuffer = buffer.slice(pos, pos + 20);        pos += 20;        bytes -= 20;        console.log(“tmpBuffer”, tmpBuffer)        wx.writeBLECharacteristicValue({          deviceId: deviceId,          serviceId: serviceId,          characteristicId: writeId,          value: tmpBuffer,          success(res) {            console.log(‘第一次发送’, res)          }        })      })    } else {     return  delay(0.25).then(() = {        tmpBuffer = buffer.slice(pos, pos + bytes);        pos += bytes;        bytes -= bytes;        wx.writeBLECharacteristicValue({          deviceId: deviceId,          serviceId: serviceId,          characteristicId: writeId,          value: tmpBuffer,          success(res) {            console.log(‘第二次发送’, res)          },          fail: function (res) {            console.log(‘发送失败’, res)          }        })      })    }  }}复制代码这边有个关键点就是delay(0.25),一定要间隔相应的时间再发送,不然即使分包也接收不到正确的数据,回调数据可在onBLECharacteristicValueChange中查看。function hexStringToArrayBuffer(str) {  if (!str) {    return new ArrayBuffer(0);  }  var buffer = new ArrayBuffer(str.length);  let dataView = new DataView(buffer)  let ind = 0;  for (var i = 0, len = str.length; i len; i += 2) {    let code = parseInt(str.substr(i, 2), 16)    dataView.setUint8(ind, code)    ind++  }  return buffer;}复制代码function delay(ms, res) {    return new Promise(function(resolve, reject) {        setTimeout(function() {            resolve(res);        }, ms);    });}复制代码

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 小程序蓝牙发送数据超过20个字节解决方案
分享到: 更多 (0)
E企盈小程序直播营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏