BCSphere入門教程04:使用iBeacon介面
上一章提到了Beacon這種只需要對廣播包進行分析的智慧硬體裝置。Beacon被認為是現代商業環節中取代二維碼實現O2O閉環的重要互動技術之一。iBeacon是蘋果提出的一種Beacon標準,可以用來進行測微距、定位、標識微地理位置等諸多功能,其廣播包資料格式及詳細介紹可以參考維基百科,本文不再贅述。BCSphere Framework中使用org.bcsphere.ibeacon
模組來支援iBeacon資料的掃描和獲取,本章將深入介紹iBeacon在BCSphere中的介面和使用方法。
硬體最小支援
支援iBeacon格式的廣播,準確的說是讓裝置在Manufacture Data裡面填入如下格式的廣播byte(此處只是格式示例):
04 3E 2A 02 01 00 01 FC ED 16 D4 EE D6 1E 02 01 06 1A(前面是常規智慧硬體廣播包部分)
FF(FF代表後面是Manufacture Data)
4C 00 02 15(0215是iBeacon的識別碼,所有在Manufacture Data前幾位發出0215的裝置都被認為是iBeacon廣播)
B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D ED(黑體部分是iBeacon的Proximity UUID)
FC D4(FCD4是iBeacon的major值)
16 B6(16B6是iBeacon的minor值)
B4(B4是iBeacon的訊號發出強度值,用來作為和RSSI一起測距的基準)
使用iBeacon模組
引入iBeacon模組非常簡單,首先在index.html頁面中按照如下順序加入script標籤:
<script type="text/javascript" src="http://115.29.149.19:3000/framework/org.underscorejs.underscore/underscore.js"></script>
<script type="text/javascript" src="http://115.29.149.19:3000/framework/org.bcsphere.bluetooth/bluetoothapi.js"></script>
<script type="text/javascript" src="http://115.29.149.19:3000/framework/org.bcsphere/bc.js"></script>
<script type="text/javascript" src="http://115.29.149.19:3000/framework/org.bcsphere.ibeacon/ibeaconapi.js"></script>
<script type="text/javascript" src="http://115.29.149.19:3000/framework/org.bcsphere/ibeacon.js"></script>
<script type="text/javascript" charset="utf-8" src="js/index.js"></script>
在index.js的deviceready
事件中通過cordova.require
來引入模組:
document.addEventListener('deviceready',function(){
var BC = window.BC = cordova.require("org.bcsphere.bcjs");
var BC = window.BC = cordova.require("org.bcsphere.ibeacon");
},false);
org.bcsphere.ibeacon
模組和所有和BC相關的模組一樣,匯出的都是附加更多介面後的BC物件。
監聽iBeacon事件
iBeacon掃描和停止掃描介面都註冊在了BC.IBeaconManager上,例如使用一個switch控制元件來進行開關:
$('#scanOnOff').change(function(){
var state = $("#scanOnOff").val();
if(state == 1){
BC.IBeaconManager.StartIBeaconScan();
}else if(state == 0){
BC.IBeaconManager.StopIBeaconScan();
}
});
StartIBeaconScan 介面接收三個引數,分別是proximity UUID,major,minor。如果不傳入任何引數,那麼預設掃描所有符合iBeacon廣播包格式的裝置,如果傳入 proximity UUID ,那麼只在掃描到proximity UUID是指定的ibeacon的時候才會觸發newibeacon
事件。如果傳入major,那麼只在掃描到proximity UUID,major也是指定的ibeacon的時候才會觸發newibeacon
事件。minor也是同理。
在bcready事件中可以註冊監聽新掃描到iBeacon事件的函式:
document.addEventListener('bcready',function(){
BC.iBeaconManager.addEventListener("newibeacon",function(event){
var newibeacon = event.target;
newibeacon.addEventListener("ibeaconproximityupdate",function(){
alert(newibeacon.proximity);
});
newibeacon.addEventListener("ibeaconaccuracyupdate",function(){
alert(newibeacon.accuracy);
});
});
},false);
注意:和BC.Bluetooth和BC.bluetooth一樣,BC.IBeaconManager中註冊了類的“靜態”掃描介面,BC.iBeaconManager中包括了物件導向的事件觸發,以及掃描到的ibeacon的集合。您可以通過迭代BC.iBeaconManager.ibeacons來遍歷掃描到的ibeacon。還可以使用BC.iBeaconManager.ibeacons[iBeaconID]來直接獲取到對應的ibeacon物件,iBeaconID是proximityUUID+major+minor的字串拼接,方便您對ibeacon的操作。
每次獲取到新的ibeacon時,都會通過newibeacon
事件獲取到新的ibeacon物件,並通過註冊在ibeacon上的事件來監聽ibeacon距離的變化。
BC.IBeacon類繼承於BC.Device類,因此掃描到iBeacon後,您可以像操作普通智慧裝置一樣對iBeacon進行連線,並通過BC.Device的介面來操作其中的特徵值。當然,每個iBeacon中包括proximity UUID major minor欄位,具體格式可以參考ibeacon.js中的註釋。
ibeaconproximityupdate
事件代表某個ibeacon離正在掃描iBeacon的智慧手機的距離發生了變化newibeacon.proximity是一個int型別的值,1代表距離在0-30釐米之間,2代表距離在30釐米到2米之間,3代表距離在2米之外。
ibeaconaccuracyupdate
事件代表ibeacon更加精細的距離變化,由於RSSI會受各種情況干擾,因此基本上每次獲得的廣播包都會導致ibeacon精細距離變化,此事件會被頻繁觸發,請謹慎使用。
本章介紹了BCSphere支援的iBeacon介面,今後的版本會增加iBeacon的功能(比如支援多個region),敬請關注BCSphere社群的詳細動態。本章同樣提供了原始碼。
下一章我們將介紹Profile的使用。
相關文章
- BCSphere入門教程目錄
- BCSphere入門教程06:使用Cordova標準模組
- BCSphere入門教程01:Immediate Alert
- BCSphere入門教程02:操作 Characteristic
- BCSphere入門教程:導言和知識準備
- BCSphere入門教程03:掃描周圍裝置
- BCSphere入門教程05:標準Profile與自定義Profile
- C#快速入門教程(16)—— 介面C#
- Android入門教程 | RecyclerView使用入門AndroidView
- 【Android開發入門教程】四.使用者介面之LayoutAndroid
- odoo 開發入門教程系列-一些使用者介面Odoo
- Android入門教程 | 使用 ConstraintLayout 構建自適應介面AndroidAI
- Python入門教程100天:Day04-迴圈結構Python
- glide從入門到使用教程IDE
- vue 基礎入門筆記 04Vue筆記
- MySQL小白入門04 - 集合運算MySql
- 簡易的伺服器介面開發入門教程伺服器
- Android入門教程 | EditText 使用者輸入Android
- Informix Dynamic Server 使用者介面工具入門ORMServer
- Android入門教程 | AsyncTask 使用介紹Android
- Android入門教程 | RecyclerView實際使用AndroidView
- Android入門教程 | DialogFragment 的使用AndroidFragment
- Iptables入門教程
- vue入門教程Vue
- Redux入門教程Redux
- Electron入門教程
- Aseprite入門教程
- Twisted 入門 教程
- flask入門教程Flask
- Maven入門教程Maven
- awk 入門教程
- HBase入門教程
- Jmeter入門教程JMeter
- Elasticsearch入門教程Elasticsearch
- SnapKit入門教程APK
- Tmux入門教程UX
- Docker 入門教程Docker
- Thrift 入門教程