let oStr = "FF0004440100000200"
let buffer = that.string2buffer(oStr)
wx.writeBLECharacteristicValue({
deviceId: that.deviceId,
serviceId: that.serviceId,
characteristicId: that.writeUUID,
value: buffer,
success(res) {
console.log('写入成功')
},
fail(res) {
console.log('写入失败')
},
complete(res) {
console.log('写入完成')
}
});
/**
* 将字符串转换成ArrayBufer
*/
string2buffer(str) {
let val = ""
if (!str) return;
let length = str.length;
let index = 0;
let array = []
while (index < length) {
array.push(str.substring(index, index + 2));
index = index + 2;
}
val = array.join(",");
// 将16进制转化为ArrayBuffer
return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function(h) {
return parseInt(h, 16)
})).buffer
},
写入数据后不管是success还是fail还是complete都不执行,我把oStr字符串的长度改成3以内,就会有回调,超过这个长度就没有任何回调。
API上写的是超过20个字节ios没有回调,现在没超过20个字节用的还是安卓手机
4 个回复
w***@163.com (作者) - 111
我用原生微信小程序的demo试过写数据,不管多长都会有回调的
王宏宇
我是同样的问题 请问你是怎么解决的啊?
八维城市
若单次写入数据过长,iOS 上存在系统不会有任何回调的情况(包括错误回调)
8***@qq.com
可以直接延时后执行下一步 不要在回调里执行 应该是ios WithoutResponse 加个setTimeout 直接执行监听notify操作可行