首页 > 新闻 > 国内 >

手把手教你如何开发AltBeacon安卓

2015-07-31 11:03:53   作者:蓝牙技术联盟    来源:CTI论坛   评论:0  点击:15804


  第一篇文章我介绍了Beacon的一些基础知识,以及AltBeacon和它的蓝牙广告形式。今天将用一个实际的开发案例,指导读者学习如何用AltBeacon安卓API开发Beacon原型APP。

  运用Beacon进行博物馆导览

  将Beacon应用于博物馆导览,这样当游客靠近展品时,APP可以提示该展品的相关信息,走过路过就再也不会错过!想象一下,如果故宫有了这款APP, 当游客走到一个不明觉厉的青铜方樽面前,只要拿起手机就能快速了解它的主人、出土信息和花纹的寓意,再也不用担心被人嘲笑没文化了。

  这个设计的设想是:首先,博物馆内安装的所有的Beacon基站都在APP能够探测到的范围内,而且APP能够默默地在后台运行并探测附近的Beacon,但只有当游客与Beacon基站的距离靠近至2米范围内时才会跳出弹窗,提示与这一Beacon相关的展品信息;其次,针对同一展品,APP不会不识趣地反复跳出提示窗;最后,还能够查阅APP系统日志底层Beacon相关事件。下面请看实地操作!

  如果你也是第一次创建Beacon应用APP,看这里!

  绑定服务,设定“区域”

  对于首次建立应用程序类别的开发者,以下几点需要注意:首先,用AltBeacon API BeaconManager将APP与后台运行的AltBeacon库中的服务绑定。另外,要着手设定一个或多个“区域”。这里所说的“区域”是指一个或一组Beacon,由AltBeacon Beacon ID 域值来规定。Beacon ID域将20个八位字节的标识域分成1个16字节的主ID、1个2字节的二级ID、1个2字节的三级ID。在我的这个APP中,主Beacon是我所关注的,因此只设定了主ID,因此我将二级和三级ID设为空值。

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...

  图1 - 基本初始化步骤

  更多干货往下看!

  程序类别

  针对不同的显示界面(包括主要展品信息界面、Beacon事件日志界面)的活动类别、以及其他一些辅助性的Java类别,这个APP包括一个自定义应用程序类和一个Actiivity类别。AltBeacon API自身就是一个库,它负责APP后台运行弹出,并提供一系列接口来支持与Beacon探测相关的回调函数。这些都通过自定义应用程序类“GyboApplication.java”执行。

 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...

  图2 - AltBeacon API 关键接口

  测定距离,更新范围

  支持“监测”与“测距”功能。监测功能会在APP进入某一个或某一组Beacon区域时生成事件。这其实是一个二进制的概念,因为只有两种可能--APP在区域内、APP不在区域内。测距功能可以追踪游客距离某一组Beacon的距离,当两者近到一定程度时,就可以触发功能。

  我们还必须对应用程序类别执行的RangeNotifier接口中的单实例对象方法“didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region)”进行编码。AltBeacon库的后台蓝牙扫描进程能够发现附近的Beacon,而“didRangeBeaconsInRegion”每秒钟调用一次,并提供当次扫描到的Beacon列表。APP绝大多数功能都在此基础上实现。

  分类则代表物理意义上的Beacon, 它有着一系列属性,包括:Beacon类型标示、蓝牙MAC地址和名称、接收信号强度指示器RSSI(Received Signal Strength Indicator)、(制造过程中设定的)校准传输的Beacon发射功率、与Beacon相对距离的估算值(以米为单位计量、通过RSSI和Beacon发射功率计算得出)。

  定义最近的Beacon,判断信息推送时间

  有了Beacon列表以及每个Beacon与游客的距离估算值,要推算出哪个Beacon离游客最近应该是不成问题的。但是在测试过程中也有一些问题。有的Beacon明知道就在范围内,却没有出现在didRangeBeaconsInRegion方法获取的Beacon列表中,到底哪里出了问题?经分析,原因可能是Beacon广播频率与安卓APP扫描的频率和持续时间不匹配,导致有时扫描过程无法接收到实际范围内所有Beacon的广告数据包。这就引出了另一个问题:如何控制安卓APP里的这些参数?

  当APP收到范围更新时,就要判断是否需要执行相应的功能。具体来说,就是看哪个Beacon离游客最近、有没有近到需要向游客提示Beacon所对应的展品信息。如果最近的Beacon发生了变化,游客会收到提示信息。例如,游客离开刚刚驻足的展品,下一次范围更新之后,离他最近的Beacon可能就不是之前那一个(组)了。当然,还要判断距离最近的Beacon是近到什么程度,才能向游客发送通知信息。实验中的APP把这一数值设定为2米。当然你也可以允许用户手动设置、自定义这一类配置。

  扫描配置又是什么?

  类允许开发者对APP进行广告数据包扫描时长、活动间歇时长等参数进行配置。可以在初始代码中添加如下的代码。

 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...

  图4 - 扫描配置

  想要做好适合APP的扫描配置,需要考虑很多方面。扫描过程的电量消耗是很大的,因此扫描频次过高或时长过长就会增加电池电量的消耗。但如果扫描频次跟不上,Beacon探测结果的更新就会延迟,进而影响用户体验。

  因此,根据实际应用场景的需要,我们必须在耗电水平和用户体验之间进行权衡取舍。例如,一个用来探测路途中经过的店铺的APP,就需要比博物馆导览APP拥有更快的Beacon广告探测和反应速度。

  还需要考虑Beacon的广播频率。如果扫描频率高于Beacon广告,有时就会由于最近一次扫描活动中的广播数据包丢失而导致实际范围内的Beacon没有出现在API回调的报告中。

  现实世界中的Beacon探测

  不得不承认,现实世界总是不完美的。为了让APP能够更好的为人民服务,程序猿编写代码时也不得不考虑现实中的问题种种。在测试过程中,尽管我们很认真地设置了扫描配置,Beacon扫描偶尔还是会有漏网之鱼。现实中,由于游客和Beacon之间的物理屏障(如人群、其他物品等)、或Beacon配置与之前设想的不同,也会出现一些纰漏。物理屏障的存在会导致游客在展厅内行走时,APP数据回报出现短暂的异常。因此,Beacon应用不应当仅根据最近一次的数据回报就立刻作出回应。认识到这一点让我们收获颇多:与其中规中矩地根据AltBeacon库回调的数据行事,不如对算法进行适度的“模糊”处理,也许能改善Beacon APP的表现。为了改善算法,我们决定采用更复杂一些的方法来追踪范围内的Beacon。
 

  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

分享到:           收藏

专题