收藏
回答

调用蓝牙接口 android和iphone取到的数据解析出来不一样?

调用接口wx.onBLECharacteristicValueChange

iphone 返回如下:

android 返回如下,

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


最后一次编辑于  2018-12-12
回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2018-12-13

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

    2018-12-13
    赞同
    回复 2
    • cf
      cf
      2018-12-21

      你好,可以加我微信? 微信号 18983002023

      2018-12-21
      回复
    • 李月
      李月
      01-09

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

      01-09
      回复
  • cf
    cf
    2018-12-13

    微信版本都是最新的 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)

    }

    })

    },


    2018-12-13
    赞同 1
    回复
  • 李月
    李月
    01-09

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

    01-09
    赞同
    回复
  • 王翊夫if
    王翊夫if
    2018-12-13

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

    2018-12-13
    赞同
    回复