在Android中构建iBeacon广告时遇到问题

时间:2019-01-10 14:37:15

标签: android ibeacon

我正在尝试使用BluetoothLeAdvertiser模拟iBeacon。 我已经设法扫描并找到iBeacon,没有任何困难,但是当我自己创建iBeacon时,发出的广告数据似乎是错误的。

我发现的信标具有以下格式: 字节0值:0x02数据长度– 2个字节 字节1值:0x01数据类型–标志 字节2的值:0x06 LE和BR / EDR标志 字节3值:0x1a数据长度– 26字节 字节4值:0xff数据类型-制造商特定数据 字节5值:0x4c制造商数据 字节6值:0x00制造商数据  ..等

我试图通过构造数组并复制上面的值来构造类似的广告数据,以使用AdvertiseData.Builder.addManufacturerData来模拟iBeacon。但是,当我发送广告数据时,已在开头添加了额外的字节: 0x1a 0xff 0x4c 0x00

我注意到多余的字节数及其值根据我设置广告设置数据的方式而变化。例如, AdvertiseData.Builder.setConnectable(true);在我的广告数据的开头添加另外3个字节(在BluetoothAdapter.LeScanCallback中检测到)。

是否可以完全控制广告商以数据形式发送的内容?我已经检查过https://github.com/AltBeacon/android-beacon-library/blob/master/src/main/java/org/altbeacon/beacon/BeaconTransmitter.java,但据我所知,它正在或多或少地在做我正在做的事情。 在Android 9.0上使用蓝牙5

1 个答案:

答案 0 :(得分:0)

Android BLE广告API不能完全控制所传输的数据包。“制造商广告”帧以一个长度字节开头,然后为0xff表示它是制造商类型,然后是两字节的制造商代码。

因此,当您看到0x1a 0xff 0x4c 0x00时,您只能部分控制这些字节。 0xff是固定的,具体取决于您要发送的广告类型。 0x1a是数据包的长度(您可以根据投放广告的字节数部分控制该长度),而0x4c 0x00是可以通过设置制造商代码进行控制的长度。

剩余字节是您的有效载荷,您可以完全控制它们,直至达到有限的数据包大小。长度(在您的情况下为0x1a)之前的任何后续字节都是标志标头,而Android则无法控制这些标头。