调用蓝牙接口 android和iphone取到的数据解析出来不一样?
发布于 6 年前 作者 yangxiong 10029 次浏览 来自 问答

调用接口wx.onBLECharacteristicValueChange

iphone 返回如下:

android 返回如下,

怎么感觉是android 把这个给截断了呢 ?

4 回复

解决了吗?我也遇到同样的问题,返回数据大于20时,ios正常,android就只能得到20

麻烦提供一下出现问题的机型和微信版本,并且给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

微信版本都是最新的 vivo的、oppo a7  android 的都会截断

vivo y67a

andtoid 6.0

oppo a7x

android 8.1.0

这个机子扫描不到设备

// 开始扫描

Inventory: function () {

var that = this;

that.setData({

‘Taglist’: []

})

var deviceId = that.data.defaultDeviceId;//.DevicesConnected[0].deviceId; //getApp().data.deviceId;//全局变量

console.log(“deviceId:” + deviceId)

that.setData({

deviceId: deviceId

})

if (deviceId == “”) {

wx.showModal({

title: ‘提示’,

content: ‘未连接蓝牙设备,请连接蓝牙设备’,

})

return

}

wx.getBLEDeviceServices({

// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接

deviceId: that.data.deviceId,

success: function (res) {

console.log(‘device services:’, res)

var serviceId = res.services[0].uuid//设置serviceId的值            

that.setData({

serviceId: serviceId

})

wx.getBLEDeviceCharacteristics({

// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接

deviceId: that.data.deviceId,

// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取

serviceId: that.data.serviceId,

success: function (res) {

console.log(‘device getBLEDeviceCharacteristics:’, res.characteristics)

for (var i = 0; i < res.characteristics.length; i++) {

if (res.characteristics[i].properties.write) {

that.setData({

writeCharacteristicId: res.characteristics[i].uuid,

})

}

if (res.characteristics[i].properties.read) {

that.setData({

readCharacteristicId: res.characteristics[i].uuid,

})

}

if (res.characteristics[i].properties.notify) {

that.setData({

notifyCharacteristicId: res.characteristics[i].uuid,

})

}

}

wx.notifyBLECharacteristicValueChange({

state: true, // 启用 notify 功能

// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  

deviceId: that.data.deviceId,

// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接s口中获取

serviceId: that.data.serviceId,

// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取

characteristicId: that.data.notifyCharacteristicId,

success: function (res) {

console.log(‘notifyBLECharacteristicValueChange success’, res.errMsg)

// 必须在这里的回调才能获取                                                

},

})

},

fail: function (res) {

console.log(res)

}

})

}

})

var tag = “”;

var TaglistArray = that.data.Taglist

wx.onBLECharacteristicValueChange(function (res) {

//处理数据,将Arraybuffer转换为base64,在将base64转换为字符串    

var base64str = base64.decode(wx.arrayBufferToBase64(res.value))//base64解密  

console.log(res.characteristicId);

console.log(base64str)

// 过滤id

//base64str = base64str.replace

if (base64str.length>20){

TaglistArray.push(base64str.replace(/\s+/g, ‘’));

}

that.setData({

Taglist: TaglistArray,

})

that.setData({

goods_num: TaglistArray.length,

})

console.log(TaglistArray)

})

wx.readBLECharacteristicValue({

// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  [**new**]

deviceId: that.data.deviceId,

// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取

serviceId: that.data.serviceId,

// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取

characteristicId: that.data.readCharacteristicId,

success: function (res) {

console.log(‘readBLECharacteristicValue:’, res)

}

})

},

看起来像是系统自动给你分包回调了。

回到顶部