亲,你这个问题解决了没有?我也遇到类似的问题,怎么都检查不出来问题
wx.writeBLECharacteristicValue写入数据无通知昨天有接收到这通知的时候,但加了一些代码后,再也无法在小程序中收到onBLECharacteristicValueChange通知,但可以肯定说蓝牙模块已经接收到数据的。 //index.js //获取应用实例 var app = getApp() Page({ data: { isOpenLock: false, pwdHidden: true, //isConnected: true,//测试 isConnected: false, powerAmount: 0,//剩余电量百分比 opResult: "", openPwd: "", newPwd: "", againPwd: "", deveiceID: "", deveiceName: "", services: [], CDffe5: "0000ffe5-0000-1000-8000-00805f9b34fb",//写数据通道服务UUID CD180f: "0000180f-0000-1000-8000-00805f9b34fb",//电池电量报告通道服务UUID CDffe0: "0000ffe0-0000-1000-8000-00805f9b34fb",//通知通道服务UUID characteristicsffe5: null,//写数据通道服务特征UUID characteristics180f: null,//电池电量报告通道服务UUID characteristicsffe0: null,//通知通道服务特征UUID tmpIndex: 0, }, btnModalBack: function (event) { // 回退前 delta(默认为1) 页面 wx.navigateBack({ delta: 1, }); }, btnModalCancel: function (event) { this.setData({ openPwd: '', newPwd: '', againPwd: '', opResult: '', pwdHidden: true }); }, btnOpenLock: function (event) { this.setData({ opResult: '', pwdHidden: false, isOpenLock: true }); }, btnModifyOpenPWD: function (event) { this.setData({ opResult: '', pwdHidden: false, isOpenLock: false }); }, btnModalOpenConfirm: function (event) { var that = this; that.setData({ opResult: "" }); if (null == that.data.openPwd || that.data.openPwd.length != 6) { that.setData({ opResult: "密码不能为空或者长度不为6位" }); return; } var tmpArray = that.buildFrame("aa0006", that.data.openPwd); console.log("开锁数据:", that.frameToString(tmpArray)); wx.writeBLECharacteristicValue({ deviceId: that.data.deveiceID, serviceId: that.data.CDffe5, characteristicId: that.data.characteristicsffe5.uuid, value: tmpArray, success: function (res) { console.log(`发送数据成功${res.errMsg}`); that.setData({ opResult: "数据发送成功" }); } }); }, btnModalModifyConfirm: function (event) { var that = this; that.setData({ opResult: "" }); if (null == that.data.openPwd || that.data.openPwd.length != 6) { that.setData({ opResult: "旧密码不能为空或者长度不为6位" }); return; } if (null == that.data.newPwd || that.data.newPwd.length != 6) { that.setData({ opResult: "新密码不能为空或者长度不为6位" }); return; } if (null == that.data.againPwd || that.data.againPwd.length != 6) { that.setData({ opResult: "新密码不能为空或者长度不为6位" }); return; } if (that.data.newPwd != that.data.againPwd) { that.setData({ opResult: "输入的两次密码不一致" }); return; } var tmpArray = that.buildFrame("aa030c", that.data.openPwd + that.data.newPwd); console.log("发送数据:", that.frameToString(tmpArray)); wx.writeBLECharacteristicValue({ deviceId: that.data.deveiceID, serviceId: that.data.CDffe5, characteristicId: that.data.characteristicsffe5.uuid, value: tmpArray, success: function (res) { console.log(`发送数据成功${res.errMsg}`); that.setData({ opResult: "修改数据发送成功" }); } }); }, inputPwdUnFocus: function (event) { this.setData({ openPwd: event.detail.value }); }, inputNewPwdUnFocus: function (event) { this.setData({ newPwd: event.detail.value }); }, inputAgainPwdUnFocus: function (event) { this.setData({ againPwd: event.detail.value }); }, getCharacteristics: function (tmpServiceId) { var that = this; wx.getBLEDeviceCharacteristics({ deviceId: that.data.deveiceID, serviceId: tmpServiceId, success: function (res) { if (res.characteristics[0].properties.notify == true) { wx.notifyBLECharacteristicValueChanged({ deviceId: that.data.deveiceID, serviceId: tmpServiceId, characteristicId: res.characteristics[0].uuid, state: true, success: function (res) { console.log("uuid ble cvc success>>>>>>>", tmpServiceId); }, fail: function (res) { console.log("uuid ble cvc fail>>>>>>>", tmpServiceId); }, }); } if (res.characteristics[0].uuid.indexOf("ffe9") != -1) { that.setData({ characteristicsffe5: res.characteristics[0] }); } if (res.characteristics[0].uuid.indexOf("2a19") != -1) { that.setData({ characteristics180f: res.characteristics[0] }); wx.readBLECharacteristicValue({ deviceId: that.data.deveiceID, serviceId: that.data.CD180f, characteristicId: that.data.characteristics180f.uuid, }); setInterval(function () { //定时执行获取电量的方法 2分钟读取一次 wx.readBLECharacteristicValue({ deviceId: that.data.deveiceID, serviceId: that.data.CD180f, characteristicId: that.data.characteristics180f.uuid, }); }, 120000); } if (res.characteristics[0].uuid.indexOf("ffe4") != -1) { that.setData({ characteristicsffe0: res.characteristics[0] }); } }, fail: function (res) { console.log(res); } }); }, buildOrderFrame: function (frameStr) { var typedArray = new Uint8Array(frameStr.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16); })); return typedArray.buffer; }, buildFrame: function (orderFix, orderContent) { var array = new Array(); for (var i = 0; i < orderContent.length; i++) { array[i] = orderContent.charCodeAt(i); } return this.buildOrderFrame(this.cs(orderFix + this.frameToString(array))); }, cs: function (orderStr) { var tmpInt = 0; for (var i = 0; i < orderStr.length / 2; i++) { tmpInt = tmpInt + parseInt(orderStr.substr(i * 2, 2), 16); } return orderStr + this.frameToString([(tmpInt & 0xFF)]) + "55"; }, frameToString: function (frame) { return Array.prototype.map.call(new Uint8Array(frame), x => ('00' + x.toString(16)).slice(-2)).join('') }, onLoad: function (query) { var that = this; if (null == query.deveiceID || null == query.deveiceName) { return; } // 生命周期函数--监听页面加载 that.setData({ deveiceID: query.deveiceID, deveiceName: query.deveiceName, }); wx.onBLEConnectionStateChanged(function (res) { // callback console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`) that.setData({ isConnected: res.connected }); }); wx.onBLECharacteristicValueChange(function (res) { // callback console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`); var hex = that.frameToString(res.value); console.log("receive>>>>>>>>>>>>>>>", hex); if (res.characteristicId == that.data.characteristics180f.uuid) { that.setData({ powerAmount: parseInt(hex, 16) }); } else if (res.characteristicId == that.data.characteristicsffe0.uuid) { var result = hex.substr(2, 2); that.setData({ opResult: result }); console.log("result>>>>>>>>>>>>>>>", result); } }); wx.createBLEConnection({ deviceId: that.data.deveiceID, success: function (res) { // success console.log("连接蓝牙成功:" + res.errMsg); that.setData({ isConnected: true }); wx.getBLEDeviceServices({ deviceId: that.data.deveiceID, success: function (res) { // success console.log('device services:', res.services) that.setData({ services: res.services }); for (var i = 0; i < res.services.length; i++) { if (res.services[i].uuid == that.data.CDffe5) that.getCharacteristics(that.data.CDffe5); else if (res.services[i].uuid == that.data.CD180f) that.getCharacteristics(that.data.CD180f); else if (res.services[i].uuid == that.data.CDffe0) that.getCharacteristics(that.data.CDffe0); } }, fail: function (res) { // fail console.log(res); }, }); }, fail: function (res) { // fail console.log("连接蓝牙失败:" + res.errMsg); that.setData({ isConnected: false }); }, }); }, onUnload: function () { this.setData({ isConnected: false }); if (null != this.data.deveiceID) wx.closeBLEConnection(); }, })
2020-07-31我也遇到这个问题了,不知道该怎么办,公司华为手机还特别多,明天找个非华为手机测试看看
安卓使用writeBLECharacteristicValue没有任何回调安卓使用writeBLECharacteristicValue没有任何回调 [图片][图片] [图片]
2020-07-30