您的位置:首页 > 产品设计 > UI/UE

BLE obtain uuid encoded in advertising packet

2015-09-17 11:59 651 查看
private BluetoothAdapter.LeScanCallback mBleScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
printScanRecord(scanRecord);

}

};

public void printScanRecord (byte[] scanRecord) {

// Simply print all raw bytes
try {
String decodedRecord = new String(scanRecord,"UTF-8");
Log.d("DEBUG----1","decoded String : " + ByteArrayToString(scanRecord));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

// Parse data bytes into individual records
List<AdRecord> records = AdRecord.parseScanRecord(scanRecord);

// Print individual records
if (records.size() == 0) {
Log.i("DEBUG", "Scan Record Empty");
} else {
Log.i("DEBUG---2", "Scan Record: " + TextUtils.join(",", records));
}

}

public static String ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.length * 2);
for (byte b : ba)
hex.append(b + " ");

return hex.toString();
}

public static class AdRecord {

public AdRecord(int length, int type, byte[] data) {
String decodedRecord = "";
try {
decodedRecord = new String(data,"UTF-8");

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

Log.d("DEBUG", "Length: " + length + " Type : " + type + " Data : " + ByteArrayToString(data));
}

// ...

public static List<AdRecord> parseScanRecord(byte[] scanRecord) {
List<AdRecord> records = new ArrayList<AdRecord>();

int index = 0;
while (index < scanRecord.length) {
int length = scanRecord[index++];
//Done once we run out of records
if (length == 0) break;

int type = scanRecord[index];
//Done if our record isn't a valid type
if (type == 0) break;

byte[] data = Arrays.copyOfRange(scanRecord, index + 1, index + length);

records.add(new AdRecord(length, type, data));
//Advance
index += length;
}

return records;
}

// ...
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: