在棒棒糖版本中,扫描结果方法返回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个数据包。
答案 0 :(得分:1)
虽然我没有使用.getManufacturerSpecificData()。我手动从scanRecord中选取数据,显然应该动态完成,但在我的情况下我知道数据会在同一个地方。
我将scanRecord从bytes转换为Hex,并将其存储为字符串,然后使用substring选择所需的数据。
String advertData = DataManipulation.bytesToHex(scanRecord);
if (advertData.contains(iBeaconIdentity)){
String majorV = adData.substring(50, 54);
希望这会指出你正确的方向。