在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('');
}
我按照前面的解决方案,在android系统上解析我们要探查的蓝牙返回的advertisData可行,而在ios11上解析advertisData却为空,跟系统有关么?蓝牙是iBeacon的,低功耗4.0。
好的,谢谢
@青鸟
你好,可以看看前面的回帖,如果还有问题可以新开一个贴,贴出你解析广播包的代码与最后的输出结果,我们一起跟进下。
"这里共性问题是开发者将获取到的arrayBuffer执行了一次 base64ToArrayBuffer ,就会出现字符串一致的情况
var advertisData = peripheral.advertisData;
var data = wx.base64ToArrayBuffer(advertisData);
应该执行的是 wx.arrayBufferToBase64,才能获取到arrayBuffer的base64字符串,如果你的advertisData只是Mac地址的话,也可以按上述的开发者解决方案来做"
我也碰到了,转换后字符串是一样的,解决了么?
df
mac_add怎么变成这样的
???
得到了 advertisData :a1b8de72d02badac81b9f7de 然后怎么变呢??
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地址有关?
@蔷薇
这里共性问题是开发者将获取到的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('');
在iphone的5s,10.2.1系统上,蓝牙广播advertisData转化成字符串后也是相同的
@bencen
苹果系统会将设备的 companyId 字段放在 advertisData 字段前两个字节,不需要的话做个切割。
安卓系统会在下版本对齐,会发开发者公告的