前面文章講述了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程序設計有一定的幫助。