前言
本文將用一個簡單的例子介紹如何用安卓手機的藍牙功能來周期性搜索周邊藍牙節點的信號強度,為有意玩一下藍牙室內定位的愛好者提供一點小的思路。(如果是想用安卓手機和藍牙模塊通信來實現遙控功能的話,可以參考:http://www.cnblogs.com/zjutlitao/p/4231635.html;想用筆記本和藍牙模塊通信來實現遙控功能的話可以參考:http://www.cnblogs.com/zjutlitao/p/3886826.html;如果是想使用筆記本的藍牙來做藍牙定位的話,哈哈,建議放棄...)
效果
定期掃描周邊藍牙設備-->根據信號強度繪制大小不同的圓圈(對於開發人員來說,引入如何搜索到BT信號強度LZ覺得應該很足夠啦,然后就可以自由發揮啦)
簡介
代碼參考:https://github.com/beautifulzzzz/Android/commit/e1d12e756d8e7c9efd9c89fb084c3f100b451427
【成員變量】SurfaceView空間用來繪制動畫效果,BluetoothAdapter用來獲取藍牙設備,接下來依次是藍牙設備信息向量、藍牙設備信號強弱向量、畫筆向量~
【初始化】在onCreate函數中執行初始化相關操作主要有:①畫筆初始化;②surfaceview初始化並設置回調函數(因為線程里無法進行界面更新,所以要把消息從線程里發送出來在消息句柄里進行處理,所以我們在37~65行會看到一個消息句柄,用來接收消息並根據消息內容重繪surfaceview)
【啟動搜索】該函數供每次觸發搜索使用,其中第一次觸發位於182行的menuOptions按鈕事件中,然后每次在繪制結束后再次調用doDiscovery進行周期性搜索。
【搜索信息並存儲】當啟動搜索之后,如果一旦搜索到設備就會觸發BleetoothDevice.ACTION_FOUND消息,然后將藍牙設備的名字和MAC地址放進向量保存,信號強度rssi放進RSSI向量保存;當搜索結束后會觸發BluetoothAdapter.ACTION_DISCOVERY_FINISHED,在這里表明一個搜索周期結束,通過Bundle發送msg,通知繪圖消息句柄,進行繪圖。
【繪圖消息句柄處理bundle消息並刷新】當上面完成一個搜索周期后會發送bundle消息來觸發繪圖(如下45~48行),繪圖完畢調用doDiscovery再次搜索,如此循環往復。
后記
當大家知道了如何周期性獲得周圍藍牙信號強度后,再結合市場上銷售的藍牙節點根據定位技術就能設計出特定應用場景的室內定位了~希望該文對大家有幫助!!!☆⌒(*^-゜)v
相關鏈接
本文鏈接:http://www.cnblogs.com/zjutlitao/p/4314096.html
更多精彩:http://www.cnblogs.com/zjutlitao/p/
工程代碼:http://pan.baidu.com/s/1mgzcW4o