前面文章讲述了android手机与ble终端之间的通信,而最常见的ble终端应该是苹果公司倡导的ibeacon基站。ibeacon技术基于ble,它的特点是通过广播对外发送消息,手机不需要连上ibeacon基站也能获取它的信息,目前主要用来做室内定位和营销信息推送,在ble发出的广播里带上带上特定的信息从而被识别为ibeacon。在ios里面使用ibeacon要经过passbook注册ibeacon的uuid和对应的文字简介,而在android上则无类似passbook这种系统级的后台蓝牙搜索服务,这类服务需要开发者自己搞定。这次就讲讲android手机搜索基站和显示ibeacon基站参数。
搜索ibeacon基站的不难,核心在于bluetoothadapter.lescancallback()的onlescan(final bluetoothdevice device, int rssi, byte[] scanrecord),而识别ibeacon的信息就在于scanrecord数组。按照https://github.com/radiusnetworks/android-ibeacon-service/blob/master/src/main/java/com/radiusnetworks/ibeacon/ibeacon.java,识别是否ibeacon靠下面的红字:
// airlocate:
// 02 01 1a 1a ff 4c 00 02 15 # apple's fixed ibeacon advertising prefix
// e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # ibeacon profile uuid
// 00 00 # major
// 00 00 # minor
// c5 # the 2's complement of the calibrated tx power
同时要注意ibeacon的uuid和ble的service、characteristic、descriptor的uuid是没关系,ibeacon的uuid是广播的时候发出,是由apple自己定义的标准,而service、characteristic、descriptor必须是连上ble终端后才得到,是ble标准。
本文代码运行结果如下,不断变化rssi可以用来做距离判断,不过这个模块的txpower不太准,所以测距就没意义:
本文代码点此本站下载,代码就不贴出来了,核心代码点此本站下载。
感兴趣的朋友可以下载本站代码测试一下运行效果,希望对大家学习android程序设计有一定的帮助。