求助:ios10系统,蓝牙广播advertisData转化成字符串后是相同的?
发布于 6 年前 作者 qiujuan 10619 次浏览 来自 问答

在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(’’);

}

 

10 回复

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地址有关?

mac_add怎么变成这样的

???

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

好的,谢谢

@蔷薇 

这里共性问题是开发者将获取到的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('');

@青鸟

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

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

      var advertisData = peripheral.advertisData;

      var data = wx.base64ToArrayBuffer(advertisData);


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

@bencen

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

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

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

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

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

回到顶部