问题:做小程序项目的时候碰到往蓝牙设备写数据超过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); });}复制代码
小程序蓝牙发送数据超过20个字节解决方案
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 小程序蓝牙发送数据超过20个字节解决方案
最新评论
好文推荐
好文推荐
666666