最近公司要搞智能手环,其中就涉及到一些BLE和iBeacon的知识,买了一些设备并且写了一些demo.
首先,简单的说,市面上的BLE设备基本都支持apple的iBeacon标准,毕竟apple大厂. 可以这么理解 BLE包括了包含了iBeacon.
而iBeacon的标准在于包含了UUID major minor 这是三用来标识身份的信息,同样,BLE中也有UUID这个属性,但是和iBeacon的UUID不是一回事.
iBeacon的UUID是从void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) 这个回调中的二进制流scanRecord 转换而来,而BLE的UUID是BLE的制造商为BLE中的各种服务和特性写入的,BLE包含了很多Service、Characteristic、Descriptor,这些可以理解成电量\计步器\心率等智能设备的服务,然后手机通过BLE提供的UUID去访问这些数据,或者写入数据.
而iBeacon的UUID是用来确定这个iBeacon的唯一标识,UUID major minor三者就类似于 省市区的关系,UUID是省,确定了省后就是市区.
比如,我们公司生产了一种符合iBeacon标准的BLE设备,我们的APP要识别这个设备是不是我们公司生产的,就用提前设定好的iBeacon的UUID去寻找,找到之后,再用BLE的UUID使用里面的服务
void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
这个回调中scanRecord转换成iBeacon的代码如下
参考:https://github.com/AltBeacon/android-beacon-library
public class iBeaconClass {
static public class iBeacon{
public String name;
public int major;
public int minor;
public String proximityUuid;
public String bluetoothAddress;
public int txPower;
public int rssi;
}
public static iBeacon fromScanData(BluetoothDevice device, int rssi, byte[] scanData) {
int