前段时间公司刚好叫我做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字节