public class Beacon {
public byte[] mBytes;
public List mItems;
}
BeaconItem 是按 type 来区分的,
public class BeaconItem {
/**
- 广播中声明的长度
*/
public int len;
/**
- 广播中声明的 type
*/
public int type;
/**
- 广播中的数据部分
*/
public byte[] bytes;
}
然后根据自定义的协议,解析对应的 BeaconItem 中的 bytes,首先创建一个 BeaconParser,传入对应的 BeaconItem,然后根据协议不断读取数据, 如果协议中某个字段占 1 个字节,则调用 readByte,若占用两个字节则调用 readShort,如果要取某个字节的某个 bit 则调用 getBit。注意 parser 每读一次数据,指针就会相应向后移动,可以调用 setPosition 设置当前指针的位置。
BeaconItem beaconItem; // 设置成 beacon 中对应的 item
BeaconParser beaconParser = new BeaconParser(beaconItem);
int firstByte = beaconParser.readByte(); // 读取第 1 个字节
int secondByte = beaconParser.readByte(); // 读取第 2 个字节
int productId = beaconParser.readShort(); // 读取第 3,4 个字节
boolean bit1 = beaconParser.getBit(firstByte, 0); // 获取第 1 字节的第 1bit
boolean bit2 = beaconParser.getBit(firstByte, 1); // 获取第 1 字节的第 2bit
beaconParser.setPosition(0); // 将读取起点设置到第 1 字节处
BLE 设备通信
● 连接
连接过程包括了普通的连接(connectGatt)和发现服务(discoverServices),这里收到回调时表明服务发现已完成。回调参数 BleGattProfile 包括了所有的 service 和 characteristic 的 uuid。返回的 code 表示操作状态