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; } // ... }
BLE obtain uuid encoded in advertising packet
最新推荐文章于 2020-04-21 23:42:31 发布