Android Ble蓝牙中如何获取RawData ,UUID,Major,Minor,Measured power at 1 meter的数据。

前段时间公司刚好叫我做Ble读写,其中就需要获得RawData ,UUID,Major,Minor,Measured power at 1 meter等数据。

网上找了,但是资源不多。

今天就告诉大家怎么获取这些值,当然也有可能是我们的供应商是这种获取方式,可能并不是通用的。

大家就作为参考。

首先我用的是第三方bluetoothkit 进行连接的。

不知道的小伙伴可以去github先了解一下。https://github.com/dingjikerbo/Android-BluetoothKit

在 mClient.search()成功后可以在onDeviceFounded()中使用device.scanRecord()获取 RawData

把获取的RawData转换成16进制字符串 

String data = bytesToHex(device.scanRecord);
static final char[] hexArray = "0123456789ABCDEF".toCharArray();

private static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    for (int j = 0; j < bytes.length; j++) {
        int v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}

你会获取一串很长的字符串,例子:

0201061AFF4C000215 B75C49D204A34071A0B535853EB0830727D3BA933C 0A094D6974756F54657374000000000000000000000000000000000000000000

这条字符里包含了UUID,Major,Minor,Measured power at 1 meter等数据

由于是16进制的数据,必须要先剪切,然后在转换成10进制得到Major,Minor,Measured power at 1 meter。

以下是具体数据位置

微信的UUID为固定值,仅需修改Major和Minor值即可。

 

uint8_t advertData[ ] ={

// IBeacon format data

0x02, // 1:length

0x01, // 2:type Flag

0x06, // 3:dicoverable mode & not support BR/EDR

0x1A, // 4:length

0xFF, // 5:type="More 16-bit UUIDs available"

0x4C,0x00, // 6-7: Apple company Id

0x02,0x15, // 8-9:For all proximity beacon,specify data type & remaining data length

//10-25: UUID

//Wechat test uuid:FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major: 10, Minor: 7

0xFD,0xA5,0x06,0x93,

0xA4,0xE2,0x4F,0xB1,

0xAF,0xCF,0xC6,0xEB,

0x07,0x64,0x78,0x25,

0x00,0x0A, // 26-27:major id

0x00,0x07, // 28-29:minor id

0xB6, // 30:mesured power

};

注意转换出来的字符串,2个字符长度等于一个字节。不要算错了

major在26-27字节

minor在26-27字节

:UUID在10-25字节

你可能感兴趣的:(Android)