欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android提高之BLE开发Android手机搜索iBeacon基站

程序员文章站 2022-04-30 22:57:57
前面文章讲述了android手机与ble终端之间的通信,而最常见的ble终端应该是苹果公司倡导的ibeacon基站。ibeacon技术基于ble,它的特点是通过广播对外发送...

前面文章讲述了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提高之BLE开发Android手机搜索iBeacon基站

本文代码点此本站下载,代码就不贴出来了,核心代码点此。

感兴趣的朋友可以下载本站代码测试一下运行效果,希望对大家学习android程序设计有一定的帮助。