在android棒棒糖中提取BLE的制造数据

时间:2014-12-05 12:09:45

标签: android bluetooth bluetooth-lowenergy

在棒棒糖版本中,扫描结果方法返回BLE的所有细节,如地址,名称扫描记录,rssi等。我在制造数据字段中广播了一些数据。我尝试使用getScanRecord().getManufacturerSpecificData()来提取单独的制造数据和字符串中的strore,但他们使用稀疏数组来存储数据。有没有办法从该数组中单独提取数据。

所以这里是LOGCAT数据:

  

12-05 17:31:39.101:I / ScanningMode(31818):找到广告   设备名称:DA14580-01,设备绑定状态:12,设备地址:   80:EA:CA:00:00:01,设备类型:2,设备蓝牙等级:1f00,RSSI:   -86,扫描记录:ScanRecord [mAdvertiseFlags = 6,mServiceUuids = null,mManufacturerSpecificData = {514 = [2,2,2,2,2,2,2,2,2,2,2]},   mServiceData = {},mTxPowerLevel = -2147483648,   mDeviceName = DA14580-01],服务数据:{},tx级别:-2147483648

当我尝试使用

System.out.println("scan value :"+result.getScanRecord().getManufacturerSpecificData());

我在logcat中得到了这样的结果 :

  

12-05 17:31:39.102:I / System.out(31818):扫描值:{514 = [B @ 61ce5dc}

任何人都可以纠正我如何单独获取数据(这里我应该只得到2,2,2,2,2,2,2,2,2,2,2)

此外,我已经从BLE设备广播了14个数据包,但是log cat只显示了12个数据包。

1 个答案:

答案 0 :(得分:1)

虽然我没有使用.getManufacturerSpecificData()。我手动从scanRecord中选取数据,显然应该动态完成,但在我的情况下我知道数据会在同一个地方。

我将scanRecord从bytes转换为Hex,并将其存储为字符串,然后使用substring选择所需的数据。

 String advertData = DataManipulation.bytesToHex(scanRecord);
 if (advertData.contains(iBeaconIdentity)){
    String majorV = adData.substring(50, 54);

希望这会指出你正确的方向。