亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

 首頁 > 新聞 > 國內(nèi) >

手把手教你如何開發(fā)AltBeacon安卓

2015-07-31 11:03:53   作者:藍(lán)牙技術(shù)聯(lián)盟    來源:CTI論壇   評論:0  點擊:


  第一篇文章我介紹了Beacon的一些基礎(chǔ)知識,以及AltBeacon和它的藍(lán)牙廣告形式。今天將用一個實際的開發(fā)案例,指導(dǎo)讀者學(xué)習(xí)如何用AltBeacon安卓API開發(fā)Beacon原型APP。

  運用Beacon進(jìn)行博物館導(dǎo)覽

  將Beacon應(yīng)用于博物館導(dǎo)覽,這樣當(dāng)游客靠近展品時,APP可以提示該展品的相關(guān)信息,走過路過就再也不會錯過!想象一下,如果故宮有了這款A(yù)PP, 當(dāng)游客走到一個不明覺厲的青銅方樽面前,只要拿起手機就能快速了解它的主人、出土信息和花紋的寓意,再也不用擔(dān)心被人嘲笑沒文化了。

  這個設(shè)計的設(shè)想是:首先,博物館內(nèi)安裝的所有的Beacon基站都在APP能夠探測到的范圍內(nèi),而且APP能夠默默地在后臺運行并探測附近的Beacon,但只有當(dāng)游客與Beacon基站的距離靠近至2米范圍內(nèi)時才會跳出彈窗,提示與這一Beacon相關(guān)的展品信息;其次,針對同一展品,APP不會不識趣地反復(fù)跳出提示窗;最后,還能夠查閱APP系統(tǒng)日志底層Beacon相關(guān)事件。下面請看實地操作!

  如果你也是第一次創(chuàng)建Beacon應(yīng)用APP,看這里!

  綁定服務(wù),設(shè)定“區(qū)域”

  對于首次建立應(yīng)用程序類別的開發(fā)者,以下幾點需要注意:首先,用AltBeacon API BeaconManager將APP與后臺運行的AltBeacon庫中的服務(wù)綁定。另外,要著手設(shè)定一個或多個“區(qū)域”。這里所說的“區(qū)域”是指一個或一組Beacon,由AltBeacon Beacon ID 域值來規(guī)定。Beacon ID域?qū)?0個八位字節(jié)的標(biāo)識域分成1個16字節(jié)的主ID、1個2字節(jié)的二級ID、1個2字節(jié)的三級ID。在我的這個APP中,主Beacon是我所關(guān)注的,因此只設(shè)定了主ID,因此我將二級和三級ID設(shè)為空值。

  圖1 - 基本初始化步驟

  更多干貨往下看!

  程序類別

  針對不同的顯示界面(包括主要展品信息界面、Beacon事件日志界面)的活動類別、以及其他一些輔助性的Java類別,這個APP包括一個自定義應(yīng)用程序類和一個Actiivity類別。AltBeacon API自身就是一個庫,它負(fù)責(zé)APP后臺運行彈出,并提供一系列接口來支持與Beacon探測相關(guān)的回調(diào)函數(shù)。這些都通過自定義應(yīng)用程序類“GyboApplication.java”執(zhí)行。

 

  圖2 - AltBeacon API 關(guān)鍵接口

  測定距離,更新范圍

  支持“監(jiān)測”與“測距”功能。監(jiān)測功能會在APP進(jìn)入某一個或某一組Beacon區(qū)域時生成事件。這其實是一個二進(jìn)制的概念,因為只有兩種可能--APP在區(qū)域內(nèi)、APP不在區(qū)域內(nèi)。測距功能可以追蹤游客距離某一組Beacon的距離,當(dāng)兩者近到一定程度時,就可以觸發(fā)功能。

  我們還必須對應(yīng)用程序類別執(zhí)行的RangeNotifier接口中的單實例對象方法“didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region)”進(jìn)行編碼。AltBeacon庫的后臺藍(lán)牙掃描進(jìn)程能夠發(fā)現(xiàn)附近的Beacon,而“didRangeBeaconsInRegion”每秒鐘調(diào)用一次,并提供當(dāng)次掃描到的Beacon列表。APP絕大多數(shù)功能都在此基礎(chǔ)上實現(xiàn)。

  分類則代表物理意義上的Beacon, 它有著一系列屬性,包括:Beacon類型標(biāo)示、藍(lán)牙MAC地址和名稱、接收信號強度指示器RSSI(Received Signal Strength Indicator)、(制造過程中設(shè)定的)校準(zhǔn)傳輸?shù)腂eacon發(fā)射功率、與Beacon相對距離的估算值(以米為單位計量、通過RSSI和Beacon發(fā)射功率計算得出)。

  定義最近的Beacon,判斷信息推送時間

  有了Beacon列表以及每個Beacon與游客的距離估算值,要推算出哪個Beacon離游客最近應(yīng)該是不成問題的。但是在測試過程中也有一些問題。有的Beacon明知道就在范圍內(nèi),卻沒有出現(xiàn)在didRangeBeaconsInRegion方法獲取的Beacon列表中,到底哪里出了問題?經(jīng)分析,原因可能是Beacon廣播頻率與安卓APP掃描的頻率和持續(xù)時間不匹配,導(dǎo)致有時掃描過程無法接收到實際范圍內(nèi)所有Beacon的廣告數(shù)據(jù)包。這就引出了另一個問題:如何控制安卓APP里的這些參數(shù)?

  當(dāng)APP收到范圍更新時,就要判斷是否需要執(zhí)行相應(yīng)的功能。具體來說,就是看哪個Beacon離游客最近、有沒有近到需要向游客提示Beacon所對應(yīng)的展品信息。如果最近的Beacon發(fā)生了變化,游客會收到提示信息。例如,游客離開剛剛駐足的展品,下一次范圍更新之后,離他最近的Beacon可能就不是之前那一個(組)了。當(dāng)然,還要判斷距離最近的Beacon是近到什么程度,才能向游客發(fā)送通知信息。實驗中的APP把這一數(shù)值設(shè)定為2米。當(dāng)然你也可以允許用戶手動設(shè)置、自定義這一類配置。

  掃描配置又是什么?

  類允許開發(fā)者對APP進(jìn)行廣告數(shù)據(jù)包掃描時長、活動間歇時長等參數(shù)進(jìn)行配置?梢栽诔跏即a中添加如下的代碼。

 

  圖4 - 掃描配置

  想要做好適合APP的掃描配置,需要考慮很多方面。掃描過程的電量消耗是很大的,因此掃描頻次過高或時長過長就會增加電池電量的消耗。但如果掃描頻次跟不上,Beacon探測結(jié)果的更新就會延遲,進(jìn)而影響用戶體驗。

  因此,根據(jù)實際應(yīng)用場景的需要,我們必須在耗電水平和用戶體驗之間進(jìn)行權(quán)衡取舍。例如,一個用來探測路途中經(jīng)過的店鋪的APP,就需要比博物館導(dǎo)覽APP擁有更快的Beacon廣告探測和反應(yīng)速度。

  還需要考慮Beacon的廣播頻率。如果掃描頻率高于Beacon廣告,有時就會由于最近一次掃描活動中的廣播數(shù)據(jù)包丟失而導(dǎo)致實際范圍內(nèi)的Beacon沒有出現(xiàn)在API回調(diào)的報告中。

  現(xiàn)實世界中的Beacon探測

  不得不承認(rèn),現(xiàn)實世界總是不完美的。為了讓APP能夠更好的為人民服務(wù),程序猿編寫代碼時也不得不考慮現(xiàn)實中的問題種種。在測試過程中,盡管我們很認(rèn)真地設(shè)置了掃描配置,Beacon掃描偶爾還是會有漏網(wǎng)之魚,F(xiàn)實中,由于游客和Beacon之間的物理屏障(如人群、其他物品等)、或Beacon配置與之前設(shè)想的不同,也會出現(xiàn)一些紕漏。物理屏障的存在會導(dǎo)致游客在展廳內(nèi)行走時,APP數(shù)據(jù)回報出現(xiàn)短暫的異常。因此,Beacon應(yīng)用不應(yīng)當(dāng)僅根據(jù)最近一次的數(shù)據(jù)回報就立刻作出回應(yīng)。認(rèn)識到這一點讓我們收獲頗多:與其中規(guī)中矩地根據(jù)AltBeacon庫回調(diào)的數(shù)據(jù)行事,不如對算法進(jìn)行適度的“模糊”處理,也許能改善Beacon APP的表現(xiàn)。為了改善算法,我們決定采用更復(fù)雜一些的方法來追蹤范圍內(nèi)的Beacon。
 

分享到: 收藏

專題

石屏县| 海宁市| 民乐县| 巴林右旗| 灯塔市| 龙井市| 和田市| 浮山县| 利辛县| 桂阳县| 长岭县| 咸丰县| 桓台县| 岑巩县| 驻马店市| 米易县| 阿拉尔市| 巩义市| 厦门市| 唐河县| 那曲县| 永康市| 石棉县| 巴东县| 射阳县| 平阳县| 河北省| 台东县| 榆林市| 彭州市| 义马市| 镇坪县| 嘉鱼县| 昌邑市| 闻喜县| 保亭| 临清市| 兴城市| 万山特区| 壶关县| 玛沁县|