前面文章講述了android手機(jī)與ble終端之間的通信,而最常見的ble終端應(yīng)該是蘋果公司倡導(dǎo)的ibeacon基站。ibeacon技術(shù)基于ble,它的特點(diǎn)是通過廣播對(duì)外發(fā)送消息,手機(jī)不需要連上ibeacon基站也能獲取它的信息,目前主要用來做室內(nèi)定位和營(yíng)銷信息推送,在ble發(fā)出的廣播里帶上帶上特定的信息從而被識(shí)別為ibeacon。在ios里面使用ibeacon要經(jīng)過passbook注冊(cè)ibeacon的uuid和對(duì)應(yīng)的文字簡(jiǎn)介,而在android上則無類似passbook這種系統(tǒng)級(jí)的后臺(tái)藍(lán)牙搜索服務(wù),這類服務(wù)需要開發(fā)者自己搞定。這次就講講android手機(jī)搜索基站和顯示ibeacon基站參數(shù)。
搜索ibeacon基站的不難,核心在于bluetoothadapter.lescancallback()的onlescan(final bluetoothdevice device, int rssi, byte[] scanrecord),而識(shí)別ibeacon的信息就在于scanrecord數(shù)組。按照https://github.com/radiusnetworks/android-ibeacon-service/blob/master/src/main/java/com/radiusnetworks/ibeacon/ibeacon.java,識(shí)別是否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
同時(shí)要注意ibeacon的uuid和ble的service、characteristic、descriptor的uuid是沒關(guān)系,ibeacon的uuid是廣播的時(shí)候發(fā)出,是由apple自己定義的標(biāo)準(zhǔn),而service、characteristic、descriptor必須是連上ble終端后才得到,是ble標(biāo)準(zhǔn)。
本文代碼運(yùn)行結(jié)果如下,不斷變化rssi可以用來做距離判斷,不過這個(gè)模塊的txpower不太準(zhǔn),所以測(cè)距就沒意義:
本文代碼點(diǎn)此本站下載,代碼就不貼出來了,核心代碼點(diǎn)此本站下載。
感興趣的朋友可以下載本站代碼測(cè)試一下運(yùn)行效果,希望對(duì)大家學(xué)習(xí)android程序設(shè)計(jì)有一定的幫助。