用于UUID的Android蓝牙LE扫描

时间:2014-11-05 10:20:06

标签: android bluetooth-lowenergy android-ibeacon

我尝试了用于BLE的android示例应用, 但我无法得到所需的输出。 需要知道如何专门扫描UUID并获取设备正在传输的消息。

对于BLE发射器,我使用我的macbook作为发射器,使用MacRadius使其充当信标。

我只是想检测我的mac的uuid,然后从中获取一些信息。

需要代码示例

由于

1 个答案:

答案 0 :(得分:0)

可以使用以下代码段从传递给scanRecord的{​​{1}}参数中解析主要服务UUID:

BluetoothAdapter.LeScanCallback#onLeScan()

然后,您必须进一步解析public static List<UUID> parseServiceUuids(final byte[] advertisedData) { List<UUID> uuids = new ArrayList<UUID>(); if( advertisedData == null ) return uuids; int offset = 0; while(offset < (advertisedData.length - 2)) { int len = advertisedData[offset++]; if(len == 0) break; int type = advertisedData[offset++]; switch(type) { case 0x02: // Partial list of 16-bit UUIDs case 0x03: // Complete list of 16-bit UUIDs while(len > 1) { int uuid16 = advertisedData[offset++]; uuid16 += (advertisedData[offset++] << 8); len -= 2; uuids.add(UUID.fromString(String.format("%08x-0000-1000-8000-00805f9b34fb", uuid16))); } break; case 0x06:// Partial list of 128-bit UUIDs case 0x07:// Complete list of 128-bit UUIDs // Loop through the advertised 128-bit UUID's. while(len >= 16) { try { // Wrap the advertised bits and order them. ByteBuffer buffer = ByteBuffer.wrap(advertisedData, offset++, 16).order(ByteOrder.LITTLE_ENDIAN); long mostSignificantBit = buffer.getLong(); long leastSignificantBit = buffer.getLong(); uuids.add(new UUID(leastSignificantBit, mostSignificantBit)); } catch(IndexOutOfBoundsException e) { // Defensive programming. Log.e(TAG, e.toString()); continue; } finally { // Move the offset to read the next uuid. offset += 15; len -= 16; } } break; default: offset += (len - 1); break; } } return uuids; } 以获取更多信息。