安卓模拟ibeacon_Android BLE-iBeacon系列(二)扫描识别iBeacon设备

干货分享:Android BLE 框架,简单易用,可能是迄今为止功能最全面的

https://github.com/a1anwang/okble

iBeacon系列文章:

正文

扫描

iBeacon设备就是一个BLE设备,所以扫描方法和BLE扫描方法一样的:

bluetoothAdapter.startLeScan( leScanCallback);

private LeScanCallback leScanCallback=new LeScanCallback() {

@Override

public void onLeScan(BluetoothDevice bluetoothdeivce, int rssi, byte[] scandata) {

//把byte数组转成16进制字符串,方便查看

Log.e("TAG","scandata:"+ Bytes2HexString(scandata) +" rssi:"+rssi);

}

};

//这里使用的android 4.3的API,android 5.0开始扫描API做了一点变化,为了获得更大的兼容性,我们依然使用的4.3的API。

//不需要兼容4.3的推荐使用android 5.0 的API,官方已经帮助我们封装了很多,使用起来更简单

这样扫描到的是所有的BLE设备,接下来要识别BLE设备是不是iBeacon设备

识别

识别就是通过扫描回调里的byte[] scandata来进行判断,判断依据就是苹果公司规定的iBeacon的广播格式:

iBeacon的广播格式

这个广播格式规定了iBeacon的广播数据是30个字节,第0,1,2字节是BLE4.0的协议固定格式,第3字节 length ,0x1A(16进制的1A等于10进制26)表示后面的数据是26个字节长度(3+1+26=30没毛病)。

再看第4字节名称是Type,数据0xFF,也是BLE4.0协议里的,顾名思义,0xFF表示的是一个类型,是厂商数据类型,表示后面的25个字节就是厂商数据(Manufacturer Data,BLE设备厂商可以自定义这部分数据,Manufacturer Data 由两部分构成:厂商id和数据部分)。Manufacturer Data里的前2个字节也就是第5-6字节,是厂商的id,固定占2个字节,苹果的公司id是0x004C(苹果公司向世界蓝牙组织申请的,不同的公司有

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值