我正在尝试使用iBeacon来模拟BluetoothLeAdvertiser。我没有遇到任何困难就成功地扫描并找到了iBeacons,但是当自己创建一个iBeacon时,发送出去的广告数据似乎是错误的。
我找到的信标具有以下格式:字节0值: 0x02数据长度-2字节1值: 0x01数据类型-标志Byte 2值: 0x06 LE和BR/EDR标志Byte 3值: 0x1a数据长度- 26字节4值: 0xff数据类型-制造商特定的数据字节5值: 0x4c制造商数据字节6值: 0x00制造商数据等
我试图构造类似的广告数据,通过构造数组和复制上面的值来模拟使用iBeacon的AdvertiseData.Builder.addManufacturerData。但是,当我发送广告数据时,在开头添加了额外的字节: 0x1a 0xff 0x4c 0x00。
我注意到额外字节的数量及其值的变化取决于我如何设置广告settingsData。例如,AdvertiseData.Builder.setConnectable(true);在我的广告数据开头再添加3个字节(如在BluetoothAdapter.LeScanCallback中检测到的)。
是否有一种绝对控制广告发送数据的方法?我已经检查了https://github.com/AltBeacon/android-beacon-library/blob/master/src/main/java/org/altbeacon/beacon/BeaconTransmitter.java,但这或多或少是在做我所能知道的事情。在Android9.0上使用蓝牙5
发布于 2019-01-10 15:00:44
Android广告API不能让您完全控制传输的数据包。A“制造商广告”帧以一个长度字节开始,然后以0 0xff表示它是制造商类型,后面跟着两个字节的制造商代码。
因此,当您看到0x1a 0xff 0x4c0x00时,您只能部分控制这些字节。0xff是根据您发送的广告类型固定的。0x1a是您的数据包的长度(您可以根据您在广告中的字节数来部分控制它)和通过设置制造商代码来控制0x4c0x00的长度。
剩余的字节是您的有效负载,您可以完全控制它们,直到有限的数据包大小。长度之前的任何进程字节(在本例中为0x1a)都是标志头,Android不能控制这些头。
https://stackoverflow.com/questions/54130966
复制相似问题