日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 通信技術 > 通信技術
[導讀] 第一篇文章我介紹了Beacon的一些基礎知識,以及AltBeacon和它的藍牙廣告形式。今天將用一個實際的開發(fā)案例,指導讀者學習如何用AltBeacon安卓API開發(fā)Beacon原型APP。運用Beacon進行博物館導覽將Beacon應用于博物館導

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

運用Beacon進行博物館導覽

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

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

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

綁定服務,設定“區(qū)域”

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

 

 

圖1 – 基本初始化步驟

更多干貨往下看!

APP程序類別

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

 

 

圖2 – AltBeacon API 關鍵接口

測定距離,更新范圍

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

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

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

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

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

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

掃描配置又是什么?

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

 

 

圖3 – 掃描配置

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

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

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

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

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

模糊的Beacon追蹤

我們的方法簡單而有效——保留了最近15秒的報告中提示位于范圍內的Beacon的相關數(shù)據(jù)緩存,以及每個Beacon最近一次被探測到的精確時間。通過計時器任務,把最近15秒內沒有被探測到的Beacon視為“過期”、移除緩存。

在可以稱得上“重中之重”的didRangeBeaconsInRegion方法中,我們更新了Beacon數(shù)據(jù)緩存和回調的Beacon對象列表,然后評估全部的緩存數(shù)據(jù),以判定目前距離最近的Beacon。于是測試的結果有了改善。這類似于數(shù)據(jù)平滑處理,相關代碼片段如下圖。

 

 

圖4 – GyboApplication.java中的Beacon緩存設置和使用

 

 

圖5 –BeaconEvent類別

 

 

圖6 –負責終止BeaconEvent對象的計時器任務

最后的最后,提醒用戶!

一旦實際執(zhí)行了獲取范圍內Beacon報告的代碼、采取了某種方式追蹤Beacon、并根據(jù)獲得的數(shù)據(jù)判斷哪一個Beacon離游客最近,那么就只剩最后一步了:在合適的情況下提示游客Beacon所關聯(lián)的展品信息。怎樣判斷是否“合適”呢?主要看最后一次生成的通知是否為同一Beacon相關的,因為沒有必要反復提示用戶同一個展品的信息。還需要將估算的Beacon距離與既設的(觸發(fā)行為的)最小距離值進行對比,判斷游客是否足夠靠近Beacon(也就是展品),然后決定是否發(fā)送展品信息。

如果APP是在前臺運行,提示游客的方法就很簡單:更新主要展覽信息頁面、顯示最近的展品介紹。我們使用內存中有關Beacon及其對應展品的數(shù)據(jù)結構,每個Beacon都有自己的ID,就可以分別對應各自的展品信息,并在APP本地映射了這些數(shù)據(jù)的對應關系,但正如第一篇中所講到的,對于除了原型以外的任何APP,最好從遠程服務器上獲取相關數(shù)據(jù),根據(jù)位置或其他信息配置Beacon。

 

 

圖7 –Beacon Information類別

 

 

圖8 –ThingOfInterest類別

通知列表下拉菜單中的通知,并將其鏈接到定義展品信息頁面的Activity。

 

 

圖9 – 安卓系統(tǒng)通知,提示附近發(fā)現(xiàn)Beacon

下圖是安卓通知的代碼。

 

 

圖10 – 創(chuàng)建通知

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉