宮雨欣,戶 國,蒿特祺,王 易,應 悅
(上海工程技術大學 城市軌道交通學院,上海 201620)
國內(nèi)大部分高校仍然使用教師課堂點名簽到的方式統(tǒng)計學生課堂出勤信息,該模式會占用正常的教學時間,影響正常的教學進度,存在諸多缺陷。
無線通信技術包括超寬頻(Ultra Wie Band, UBW)、ZigBee技術、射頻識別(Radio Frequency Identification, RFID)、無線寬帶(Wi-Fi)、4G通信技術等[1]。眾多分布于不同位置的路由器所發(fā)射出的無線信號是構成無線局域網(wǎng)的首要條件,每個無線信號所在的發(fā)射裝置都有一個獨立的設備編號(MAC地址),用戶可以使用自己的設備連接這些無線信號,從而登入互聯(lián)網(wǎng)。用戶登錄后,用戶的設備便可以通過JS獲取MAC地址,或通過后臺代碼獲取設備的MAC地址。基于此,只要讓手機根據(jù)本地IP獲取周邊路由器的MAC地址,在數(shù)據(jù)庫中搜索與該路由器相匹配的數(shù)據(jù),即可實現(xiàn)定位功能。
隸屬于美國的SkyhookWireless公司首次提出了Wi-Fi定位以及相關技術,通過不斷改善,Wi-Fi定位技術日趨成熟,其原理為:根據(jù)Wi-Fi熱點具有的位置不變性的性質(zhì),不同的Wi-Fi熱點在通電的情況下,就會向周圍空間發(fā)射其所產(chǎn)生的信號,并且此信號具有全球唯一性,并將該信號命名為ID—MAC地址,通過偵控一定范圍內(nèi)的AP(即Wi-Fi熱點)的MAC地址,將該地址傳送到服務器內(nèi),服務器可根據(jù)已經(jīng)儲存在數(shù)據(jù)庫中的MAC地址,運用相關算法,獲得客戶端具體位置。
本文基于MAC地址探測的相關原理開發(fā)校園簽到與定位系統(tǒng),通過獲取校園內(nèi)不同地點的MAC地址,實現(xiàn)用戶在校園內(nèi)的打卡與定位的功能。該軟件的前端開發(fā)集成工具是Android Studio 3.0版本,后端數(shù)據(jù)庫是MySQL數(shù)據(jù)庫,服務器使用的是阿里云,服務器容器使用的是Tomcat。手機應用程序可以高效的實現(xiàn)校園內(nèi)的精確定位和打卡功能,具有易操作、易實現(xiàn),實用性強的特點。
系統(tǒng)主要由4個模塊構成:數(shù)據(jù)通信模塊、Wi-Fi探測模塊、后端校驗模塊和返回數(shù)據(jù)模塊,軟件的整體架構如圖1所示。首先使用Wi-Fi探測模塊,利用終端設備探測周圍的MAC地址;數(shù)據(jù)通信模塊會借助網(wǎng)絡將探測到的MAC地址傳輸?shù)胶笈_服務器,并通過Tomcat容器發(fā)送請求;后臺校驗模塊會將在MySQL數(shù)據(jù)庫中尋找到的相應站點的MAC地址與反饋的MAC地址相比對,校驗結果會通過系統(tǒng)的返回數(shù)據(jù)模塊,若反饋的結果與后臺數(shù)據(jù)庫中相應站點的MAC地址存在重疊,顯示打卡成功;若不存在重疊,系統(tǒng)則會顯示使用者打卡不成功。
圖1 基于MAC地址的校園簽到與定位軟件整體架構
軟件開發(fā)可分為前端與后端兩個部分。前端的操作系統(tǒng)為Windows 10操作系統(tǒng),編譯環(huán)境為Android Studio 3.0;搭建后端時,可兼容Windows 10系統(tǒng)與Linux系統(tǒng),利用IntelliJ ideal(2017.03.05)在麥文(Marven)平臺上進行編譯,最大程度地優(yōu)化了APP功能并提高其運行效率。本項目使用Tomcat作為儲存容器,租借阿里云服務器并使用Navicat Premium作為后端數(shù)據(jù)庫,通過xUtils網(wǎng)絡請求來完成前端與后端的數(shù)據(jù)傳輸。
為保證軟件定位和簽到功能的正常運行,要創(chuàng)建數(shù)據(jù)庫存儲、統(tǒng)計學生的基本信息、校內(nèi)服務器中相應地點的MAC地址等數(shù)據(jù)。由于校園范圍過大,軟件開發(fā)初期先以特定站點為中心,反復多次探測該范圍內(nèi)的MAC地址,將所測數(shù)據(jù)傳入后臺數(shù)據(jù)庫中[2]。
Android系統(tǒng)開發(fā)中有File存儲數(shù)據(jù)、Shared Preferences存儲數(shù)據(jù)、Content Provider存儲數(shù)據(jù)和SQLite數(shù)據(jù)庫存儲數(shù)據(jù)4種常見的數(shù)據(jù)存儲方式。其中,SQLite是一款輕量級數(shù)據(jù)庫,占用資源低,較于其它數(shù)據(jù)庫處理速度快,具有獨立性、隔離性、安全性等多種特征,但其并不適用于大數(shù)據(jù)量的情況[3]。小型的手機應用程序,其定位和簽到功能簡單,僅局限于校園內(nèi),數(shù)據(jù)量較小,師生訪問量不高,且要求讀取速度快,故采用SQLite作為數(shù)據(jù)庫。關鍵數(shù)據(jù)結構包括:用戶注冊登錄信息表、用戶簽到信息表、打卡地點MAC地址信息表。其中,用戶注冊登錄信息包含序號、學院、密碼、學生學號、學生姓名,見表1;用戶簽到信息包含序號、創(chuàng)建時間、設備ID、打卡位置、MAC地址、學生學號,見表2;MAC地址信息包含序號、MAC地址、地址名稱、父輩代號、子輩代號,見表3。用Java API編寫數(shù)據(jù)庫應用程序。
表1 用戶注冊登錄信息表
表2 用戶簽到信息表
表3 打卡地點MAC地址信息表
校園簽到定位系統(tǒng)需要采集校園內(nèi)不同地點的MAC地址,為降低其它設備(如手機等)對采集的影響,需采用多次測量排異的方法,即在不同時段采集同一地點的數(shù)據(jù),確認某一地點的MAC地址時,采取類似“投票表決”的機制,該機制的主要流程如圖2所示。將第一次探測得到的MAC地址匯總成列表A,往后的每一次探測,均先定義一張空列表B,并將探測得到的結果匯總到列表B中,從列表B中不重復地取出一個MAC地址,若該地址未在列表A中,則將該地址添加至列表A中;若該地址已經(jīng)在列表A中,則該地址可能性加1。如此循環(huán),最后取可能性最大的地址名稱為該地點的MAC地址,將其導入到服務器中。
圖2 “投票表決”機制的流程圖
定位功能使用手機自帶的GPS模塊獲取用戶的實時位置,確定用戶所處的校區(qū)并顯示。
Android系統(tǒng)對地理位置的操作進行了封裝,其中 LocationManager 提供了獲取地理位置信息的接口,LocationProvider可以提供各種定位技術,在其中進行指定和設置,讓 LocationManager 利用當前 LocationProvider 來獲得地理位置信息,再依據(jù) Criteria 來設定精度標準。
確定用戶在校園內(nèi)的準確位置則采取投票機制,依賴于MAC地址信息模塊,取可能性最大的MAC地址名稱上傳至服務器,與數(shù)據(jù)庫中已存儲的MAC地址進行比對,從而判斷用戶的實時位置,并將結果反饋給手機應用程序。
為了更好的組織手機應用程序的各個模塊,采用分層結構設計,明確每一個層次系統(tǒng)的功能和作用形成一個良好的層次系統(tǒng),層與層之間是松耦合關系,下層模塊為上層模塊提供服務。
手機應用程序的軟件結構從上到下主要由用戶界面層、用戶功能層、中間件層和操作系統(tǒng)層這4個部分組成,如圖3所示,其中中間件層又分為核心功能層與基礎功能層。
圖3 軟件層次結構圖
在此結構中,下層為上層提供服務接口以供上層調(diào)用,但層與層之間隱瞞內(nèi)部實現(xiàn),當某一層的實現(xiàn)產(chǎn)生變化時,只要接口不變,就不會影響其它層次的功能實現(xiàn)。層與層之間相互聯(lián)系,各層次內(nèi)的模塊又相互獨立,不同模塊間通過接口調(diào)用,盡量滿足高內(nèi)聚低耦合的原則[4]。
在分層結構的基礎上,將上述各功能模塊獨立的安置在每一層中,如圖4所示。以Android操作系統(tǒng)為例,中間件層的基礎功能層提供網(wǎng)絡通信、數(shù)據(jù)儲存、第三方應用等基礎服務。核心功能層提供數(shù)據(jù)訪問、數(shù)據(jù)比對、MAC地址偵測、消息推送和定位服務。用戶功能層依賴核心功能層所提供的服務來實現(xiàn)用戶所需要的功能。
圖4 模塊功能
本文為手機應用程序設計了非常豐富的功能,不僅能精確完成日常定位打卡的操作,為日常教學增添了許多的便利之處。
本文設計了一款基于MAC地址的校園簽到與定位系統(tǒng)。采集并確認校園內(nèi)不同地點的MAC地址數(shù)據(jù),并將這些數(shù)據(jù)錄入到后臺數(shù)據(jù)庫中;使用時系統(tǒng)將先采集和確認用戶所在地點的MAC地址,并將這一地址傳輸?shù)胶笈_數(shù)據(jù)庫進行比對,從而實現(xiàn)在校園內(nèi)的精準定位。測試表明該系統(tǒng)操作便捷,準確度高、靈活度高、可延展性強,能實現(xiàn)學生在校園內(nèi)的精準定位和打卡功能,并能幫助教師統(tǒng)計學生的出勤信息。