BLE广告使用自定义数据包

时间:2015-11-21 12:14:26

标签: android bluetooth bluetooth-lowenergy android-bluetooth

name:here的描述说:

  

此课程提供了一种执行蓝牙LE广告操作的方法,例如启动和停止广告。广告客户可以广播由AdvertiseData 表示的最多31个字节的广告数据。

这是否意味着我可以决定整个31字节的每个字节可以包含哪些内容?如果有,怎么样? BluetoothLeAdvertiser中列出的方法为AdvertiseData.BuilderaddManufacturerDataaddServiceData,这些方法在我的案例中并不常用。

由于

2 个答案:

答案 0 :(得分:2)

AFAIK您无法直接添加数据,因此您需要使用API​​来添加数据。然后为了节省空间,您应该将setIncludeDeviceName setIncludeTxPowerLevel设置为false。

然后,如果你想使用特征等,即你想让BLE外设提供额外的数据,而不仅仅是一个信标。然后,您必须在扫描记录中包含标志。标志需要采用正常部分,即类型+长度+数据,因此需要3个字节。如果您只使用信标,那么您将保存3个字节以用于您自己的数据。

我认为服务数据需要添加一些服务UID,所以我认为它占用空间,并且使用的最佳选项是制造商数据。

制造商数据采用类型&的正常字节。 lenght,另外android设备似乎会自动添加制造商数据,这需要额外的2个字节。

因此,对于简单的信标,您确实可以通过扫描记录传送31-4 = 27个字节的有效负载。

答案 1 :(得分:0)

我认为这可行:

  1. 使用BluetoothLeScanner类的startScan方法,并使用适当的ScanCallback回调 - https://developer.android.com/reference/android/bluetooth/le/BluetoothLeScanner.html
  2. 调用ScanCallback方法的onScanResult方法时,获取ScanResult对象 - https://developer.android.com/reference/android/bluetooth/le/ScanCallback.html
  3. 在其上执行getScanRecord - https://developer.android.com/reference/android/bluetooth/le/ScanResult.html
  4. ScanRecord对象上的getAdvertiseFlags或getBytes肯定能满足我们的需求 - https://developer.android.com/reference/android/bluetooth/le/ScanRecord.html