收藏
回答

求助:ios10系统,蓝牙广播advertisData转化成字符串后是相同的?

问题模块
API和组件

在ios9系统上完成正常,升级之后,advertisData转化成字符串 是相同的了(附截图)

代码如下:

else if (app.deviceInnfo.platform == 'ios') {

      //真机

      peripheral = res.devices[0];

      var advertisData = peripheral.advertisData;

      var data = wx.base64ToArrayBuffer(advertisData);

      var str = buf2hex(data);

      peripheral.mac_add = getMacAddress(str.toUpperCase());

      peripheral.advertisDataStr = str;

      array.push(res.devices[0]);

      console.log(peripheral);

   }

function buf2hex(buffer) {

  return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');

}

      


最后一次编辑于  2017-08-01
回答关注问题邀请回答
收藏

24 个回答

  • 胡style
    胡style
    2017-10-23

    我按照前面的解决方案,在android系统上解析我们要探查的蓝牙返回的advertisData可行,而在ios11上解析advertisData却为空,跟系统有关么?蓝牙是iBeacon的,低功耗4.0。

    2017-10-23
    赞同
    回复
  • 胡style
    胡style
    2017-10-23

    好的,谢谢


    2017-10-23
    赞同
    回复
  • 王翊夫if
    王翊夫if
    2017-10-23

    @青鸟


    你好,可以看看前面的回帖,如果还有问题可以新开一个贴,贴出你解析广播包的代码与最后的输出结果,我们一起跟进下。


    "这里共性问题是开发者将获取到的arrayBuffer执行了一次  base64ToArrayBuffer ,就会出现字符串一致的情况

          var advertisData = peripheral.advertisData;

          var data = wx.base64ToArrayBuffer(advertisData);


    应该执行的是 wx.arrayBufferToBase64,才能获取到arrayBuffer的base64字符串,如果你的advertisData只是Mac地址的话,也可以按上述的开发者解决方案来做"

    2017-10-23
    赞同
    回复
  • 胡style
    胡style
    2017-10-23

    我也碰到了,转换后字符串是一样的,解决了么?

    2017-10-23
    赞同
    回复
  • 王木木
    王木木
    2017-10-12

    df

    2017-10-12
    赞同
    回复
  • 王木木
    王木木
    2017-10-12

    mac_add怎么变成这样的

    ???

    得到了 advertisData :a1b8de72d02badac81b9f7de 然后怎么变呢??

    2017-10-12
    赞同
    回复
  • 蔷薇
    蔷薇
    2017-08-21

    var advertisData = tempDevice[0].advertisData

                //var data = wx.arrayBufferToBase64(advertisData)

                var str = that.buf2hex(advertisData)

                console.log(tempDevice[0].deviceId, '============', data)

    这里打印出来的data为:ABvGqhgLJd7rxxyLhwPGV+MB672BlqiW

    和mac地址有关?


    2017-08-21
    赞同
    回复
  • 王翊夫if
    王翊夫if
    2017-08-21

    @蔷薇 

    这里共性问题是开发者将获取到的arrayBuffer执行了一次  base64ToArrayBuffer ,就会出现字符串一致的情况

          var advertisData = peripheral.advertisData;

          var data = wx.base64ToArrayBuffer(advertisData);


    应该执行的是 wx.arrayBufferToBase64,才能获取到arrayBuffer的base64字符串,如果你的advertisData只是Mac地址的话,也可以按上述的开发者解决方案来做


    function buf2hex(buffer) {

      return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');


    2017-08-21
    赞同
    回复
  • 蔷薇
    蔷薇
    2017-08-21

    在iphone的5s,10.2.1系统上,蓝牙广播advertisData转化成字符串后也是相同的


    2017-08-21
    赞同
    回复
  • 王翊夫if
    王翊夫if
    2017-08-10

    @bencen

    苹果系统会将设备的 companyId 字段放在 advertisData 字段前两个字节,不需要的话做个切割。

    安卓系统会在下版本对齐,会发开发者公告的

    2017-08-10
    赞同
    回复

正在加载...