在棒棒糖版本中,扫描结果方法返回BLE的所有细节,如地址、名称扫描记录、rssi等,我在制造数据字段中广播了一些数据,我尝试使用getScanRecord().getManufacturerSpecificData()
来提取单独的制造数据和字符串中的data.is,但是他们使用一个稀疏数组来存储该数组中的数据,可以单独从该数组中提取数据。
下面是LOGCAT数据:
12-05 17:31:39.101: I/ScanningMode(31818):找到具有设备名称的广告:EA 14580-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},mServiceData={},mTxPowerLevel=-2147483648,mTxPowerLevel=data 14580-01],服务数据:{},tx级别:-2147483648
当我试图用
System.out.println("scan value :"+result.getScanRecord().getManufacturerSpecificData());
我在逻辑猫里就像这样:
12-05 17:31:39.102: I/System.out(31818):扫描值:{514=[B@61ce5dc}
有人能纠正我如何单独获得数据吗?(在这里,我只能得到2,2,2,2,2,2,2,2,2,2)数据。
另外,我从BLE设备上广播了14个数据包,但是日志猫只显示了12个数据包。
发布于 2014-12-19 01:46:36
虽然我没有使用.getManufacturerSpecificData()。我已经手动从scanRecord中提取数据,显然应该是动态的,但在我的例子中,我知道数据将在同一个位置。
我将scanRecord从字节转换为十六进制,并将其存储为字符串,然后使用子字符串来选择所需的数据。
String advertData = DataManipulation.bytesToHex(scanRecord);
if (advertData.contains(iBeaconIdentity)){
String majorV = adData.substring(50, 54);
希望这能为你指明正确的方向。
https://stackoverflow.com/questions/27315605
复制