收藏
回答

BLEPeripheralServer.startAdvertising每次广播MAC地址都在变

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug BLEPeripheralServer.startAdvertising 微信安卓客户端 8.0.2 WeChatLib: 2.16.0 (2021.3.24 16:33:35)

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.startAdvertising.html

手机:华为 Mate8 / Android8.0.0

使用 BLEPeripheralServer.startAdvertising() 发送广播时,每一次广播时使用的蓝牙 MAC 地址都是不同的!并且都不是手机蓝牙真正的 MAC 地址!

这样在设备端接收时,就无法判断是否是同一部手机啊!

怎么才能保证在广播时使用手机蓝牙真正的 MAC 地址而不是老变呢?

下面是使用蓝牙 sniffer 抓包工具抓到的包,可以看到每次广播时使用的地址都是随机的!

发送广播的代码如下:

// 蓝牙广播(到指定时间后自动停止广播)
function _advertise(data, timeout) {
	if(!blesvr) { console.log("未创建蓝牙外设或它已经被关闭!"); return; }
	timeout = timeout || 0;
	binary.dump(new Uint8Array(data));

	// 开始发送广播
	blesvr.startAdvertising({
		advertiseRequest: {
			connectable: true, // 必须设置为可连接的,否则设备侧无法接收到广播 !
			manufacturerData: [{
				manufacturerId: "0x1A80",
				manufacturerSpecificData: data,
			}]
		},
		powerLevel: "high",
	});
	
	// 设置定时停止广播回调
	if(timeout > 0) { setInterval(function() { blesvr.stopAdvertising(); }, timeout); }
}
回答关注问题邀请回答
收藏
登录 后发表内容
问题标签