摘 要: 鑒于智能終端設備的普遍應用和WiFi信號的覆蓋范圍的日益擴大,設計開發一種基于Android操作系統、WiFi以及GPS等技術為核心的GPS導航應用系統,對系統各主要功能模塊的設計進行了詳細的分析與研究。系統實現的功能模塊主要包括圖形界面模塊、GPS定位模塊、WiFi掃描模塊、手機連接WiFi網絡模塊、Socket通訊及數據庫管理模塊。借助該系統,基于Android系統的移動終端可方便地查詢自身位置,并獲取各種基于位置的服務。
關鍵詞: WiFi; GPS; Android; Socket通訊; 數據庫
中圖分類號: TP311 文獻標識碼: A 文章編號:2095-2163(2013)03-0060-05
Design and Development of Navigation System in Android Mobile Devices based on WiFi
ZHAO Meng, CUI Gang
(School of Computer Science and Technology, Harbin Institute of Technology, Harbin 150001,China)
Abstract: In view of pervasive use of smart terminal devices and increasing expansion of area the WiFi signal covers,this paper designs a GPS navigation application system based on the Android operating system, WiFi and GPS technology as the core,and carries out a detailed analysis and research on the design of the main function modules of the system.The function modules that the system has achieved include the GUI module,the GPS positioning module,the WiFi scanning module, the mobile phone connecting to a WiFi network module,Socket communication and database management module.With the system,the mobile intelligent terminal based on Android system can easily get its location and some intelligent services based on location.
Key words: WiFi; GPS; Android; Socket Communication; Database
0 引 言
隨著互聯網在全球的快速發展與強勢普及,人們的生活與工作隨時隨地都可能需要上網,由此產生了大量的WLAN服務需求,并且具備WiFi功能模塊的智能手機也已進入大眾流行。因而,基于WiFi技術的突出優勢,智能移動終端系統的開發將具有廣闊的市場空間和發展前景。雖然全球衛星定位系統(Global Position System ,GPS)的使用在持續增長,但是各種適用于個人徒步行走的實時定位的服務產品還非常少見[1]。目前,隨著智能手機的推廣,如何拓展手機GPS功能,在智能手機中開發基于GPS技術的應用系統已經成為目前的一個熱點議題和研究課題。
1 Android平臺以及 WiFi 技術簡介
1.1 Android操作系統
Android一詞的本義指“機器人”,是Google基于Linux平臺的開放源碼手機操作系統的統稱,主要用于平板電腦和智能手機等設備中,是當今使用最廣泛的手機操作系統之一。Android的核心競爭力在于其公開了源代碼,而且允許第三方軟件自由加入。此外,基于Android系統的可移植性,更加便于系統維護和升級,而且能夠有效降低軟件成本。Android 操作系統自上向下分成 4 個層次,即應用層、應用框架層、組件庫層和虛擬機、Linux 內核層。Android 系統架構如圖1所示[2]。
圖1 Android 系統架構[2]
Fig.1 The system architecture of Android
Android系統為開發者提供了豐富的類庫,整個平臺具有良好的開放性和擴展性。其中,Android平臺提供了一個專門的位置功能類庫android.location來支持開發基于定位服務的應用程序。Android.location包含了一套與定位相關的類,分別是位置類Location、定位管理類LocationMananger 、位置提供類LocationProvider 、定位監聽類LocationListener、位置數據標準類Criteria 。Android系統中支持WiFi模塊的相關API如表1所示。
表1 android.net.wifi的主要類與接口說明[3]
Tab.1 The main class and interface description
of android.net.wifi
類或接口 說明
WiFiManager 提供了管理所有WiFi連接的API
WiFiInfo 描述了WiFi連接狀態
WiFiConfiguration 代表了一個已配置的WiFi網絡
ScanResult 描述掃描到的WiFi熱點信息
1.2 WiFi技術第3期 趙萌,等:基于WiFi的Android移動設備導航系統的設計開發 智能計算機與應用 第3卷
WiFi是一種可將手持設備(如手機、PDA)、個人電腦等終端以無線方式相連接的技術。WiFi技術從開始到現在歷經了多個版本,包括從最早的802.11到后續的802.11a,802.11b,802.11g,802.11i,802.11n。可以說WiFi技術代表的就是802.11協議體系。WiFi技術定義只涉及數據鏈路層的MAC子層和物理層。WiFi在2.4Ghz頻段工作,所支持速度最高可達54Mbps[4]。此外,WiFi無需布線傳播,室外的傳輸范圍最大為300米,室內有障礙時最大距離約為100米,是當今最流行的短距離無線傳輸協議。
WiFi組建方法簡單,是由AP(Access Point)和無線網卡組成的無線網絡。WiFi的網絡拓撲圖如圖2所示。WiFi 具有高速無線傳輸、無需布線、較長距離工作、健康安全、與有線網絡無縫融合等特點,使其得到廣泛應用。
圖2 WiFi網絡結構圖
Fig.2 The network structure of WiFi
2 WiFi通信的安全分析
隨著支持WiFi功能的智能手機的普及以及無線AP數量的迅猛增長,WiFi得到了高效發展。但與此同時,由于無線網絡的共享性與開放性,WiFi通信的安全問題也愈顯突出。本節就基于WiFi網絡中可能面臨的安全問題提出幾種安全技術,并進行了深入的分析與探討。
2.1 WEP技術
WEP(Wired Equivalent Privacy)加密技術源自于名為RC4的RSA數據加密技術,旨在滿足用戶更高層次的網絡安全需求。有線等效保密(WEP)協議是對在兩臺設備間進行無線傳輸的數據實現加密的方式,用以防止用戶侵入無線網絡和非法竊聽。WEP有2種認證方式:共享密匙訪問認證和開放式系統認證。WEP算法在802.11協議中是一種數據鏈路層安全機制,用于進行數據加密、訪問控制等。
當無線工作站請求欲訪問AP時,首先就必須通過AP的訪問認證。認證過程如圖3所示[5]。在通信鏈路建立正確連接之后,即可傳輸數據,傳送的數據內容將通過WEP完成加密和解密。在發送方,數據使用共享的密鑰進行加密;在接收方,加密的數據使用共享的相同密鑰進行解密;最終實現整個通信過程。但經細致分析即可看出,WEP中存在不少安全隱患,例如:RC4算法缺陷、ICV篡改、密鑰管理機制缺乏、用戶密鑰的隱形缺陷等。
圖3 共享密匙訪問認證中的消息過程
Fig.3 The message procedure of shared key
access authentication2.2 WPA技術
WPA(WiFi Protected Access),即WiFi網絡安全存取技術,是一種保障WLAN安全性增強的解決方案,可提高現有以及未來WiFi局域網系統中訪問控制和數據保護水平。WPA 技術源于正在制定中的IEEE802.11i 標準,并將與之保持前向兼容。鑒于上述討論已指出WEP的不安全性,在802.11i協議完善前,用戶可采用WPA為其訪問WLAN網絡提供一個臨時性的解決方案。該項標準的數據加密機制采用臨時密鑰完整性協議(TKIP),認證則有兩種模式。一種是使用預先共享密鑰PSK(Pre-Shared Key)進行認證;另一種是利用802.1x協議進行認證。
TKIP是一種改進的WEP方案,是針對WEP存在的安全隱患而提出相應補救措施。通過采用和WEP一樣的RC4對稱加密算法,即解決了WEP中的固定公有密鑰以及短IV等問題。
2.3 WPA2標準
實際上,WPA加密技術包含TKIP和CCMP(AES或AES-CCMP)兩種加密方式。TKIP本質上是一種過渡型的加密協議,盡管針對WEP的缺點作了重大的改良,也解決了WEP中可能存在的一些安全問題,但仍保留了RC4算法及基本架構,因而也延續了RC4算法隱含的弱點在內。后來,WiFi組織又推出了WPA2,采用CCMP加密協議,其與WEP完全不同的地方在于采用了新的AES高級加密算法。WPA2是目前安全性最好的無線加密模式,其認證模式與WPA一般無二。
綜上所述,WEP、TKIP及CCMP加密機制的各項對比列成表格,結果如表2所示[6]。
表2 WEP、TKIP及CCMP安全方案對比
Tab.2 The contrast of WEP、TKIP and CCMP
safety programs
加密
機制 密鑰 加密
算法 優點
缺點
WEP
靜態40位
或128位
RC4算法
使用共享密鑰加密算法,只有在用戶的密鑰與AP的密鑰相同時才能訪問網絡,防止非法用戶侵入 靜態簡單密鑰容易破解,安全性最低
TKIP
動態
128位
RC4算法
加強了網絡安全性,可以在現有硬件上通過軟件升級實現 采用RC4算法,簡短密鑰容易破解
CCMP
動態
128位 AES算法
安全性最高
對硬件要求高
3 系統設計
3.1 系統架構
系統主要功能是,當用戶到達一個陌生環境,可以利用手機客戶端軟件實時定位用戶當前位置,繼而獲得周圍的交通、賓館、銀行等位置信息,為用戶出行提供方便。系統由終端設備(配備WiFi模塊的Android手機、平板電腦)、無線接入點(AP)、中心服務器、路由器以及PC共同組成。系統的網絡拓撲結構如圖4所示。
圖4 系統拓撲結構圖
Fig.4 The topology diagram of the system 系統中,客戶端是指配備WiFi模塊的Android智能手機、平板電腦等移動設備,本系統客戶端采用了Android智能手機。首先,利用GPS定位模塊獲取當前的位置信息;然后,掃描周圍的WiFi熱點,手機連接到指定WiFi網絡;最后,通過WiFi網絡將定位信息發送至服務器端。客戶端也可以通過WiFi網絡收到服務器端返回的服務信息,主要包括當前位置周邊有關的交通、賓館、銀行等位置信息。
系統服務器端的主要功能是負責接收位置信息,并根據位置信息查找數據庫,再將服務信息返回給客戶端。服務器端能夠響應并處理客戶端的請求,對數據庫中的相關信息完成添加、刪除、查詢、更改等各種操作,并將操作結果通過WiFi網絡返回給客戶端高清顯示。服務器端的功能模塊主要包括Socket通訊子模塊和數據庫管理子模塊。
3.2 系統原理
首先,客戶端利用Android系統提供的與GPS定位相關的API實現手機GPS定位,獲取當前所在位置信息;然后,就要將手機連接到服務器所在的WiFi網絡,實現客戶端和服務器的信息交互。而要連接到WiFi網絡,則要掃描周圍的WiFi熱點(AP),在WiFi網絡中用SSID來區分不同的無線網絡,掃描結束后列表中就會出現周邊所有的接入點AP的BSSID、capabilities、frequency、level、SSID等信息。接下來就是連接指定網絡名稱(SSID)的WiFi網絡,并根據上述掃描到該接入點的相關屬性信息配置該網絡,配置完成后再利用Android平臺提供的WiFi操作相關API即可接入WiFi網絡。最后,就是通過基于 TCP 協議的 Socket 通信開發實現客戶端與服務器端的信息傳輸。
3.3 系統模塊劃分
本系統的實現主要通過模塊劃分,劃分結果如圖5所示。
圖5 系統模塊劃分圖
Fig.5 The module division of the system3.4 系統安全性
由于用戶信息通過無線網絡傳輸,且信息需要保密,因此需要系統具備較高的安全性。本系統為WiFi網絡設置安全機制。WiFi設置為 WPA-PSK加密方式(加密類型為TKIP)。
4 主要模塊的實現
本系統的實現過程主要是利用了Android平臺的5大功能模塊,分別為Linux內核層、Android運行環境、普通函數程序庫、應用框架層和Android應用程序層。在應用程序層利用Android平臺提供的與GPS、WiFi相關的API接口,開發基于WiFi的GPS應用程序,并由Linux內核層提供相應的底層驅動。
4.1 開發工具及運行環境
軟件開發包:JDK 、Android SDK
IDE: Eclipse IDE+ADT
數據庫: MySQL JDBC
4.2 用戶界面設計模塊
構建Android用戶界面使用的主要是XML進行配置生成的方式,在xml文件中使用LinearLayout命令進行界面布局,可以放置各種組件。本系統設計了3個操作界面來實現用戶與系統的交互,分別是啟動提示界面、GPS定位界面、WiFi操作界面。
下面以實現啟動提示界面為例進行設計,啟動提示界面設計的布局資源文件使用了一個Button和TextView,單擊Button會跳轉到GPS搜索界面;而TextView則用來顯示程序開始運行前的一些注意事項。程序中首先獲取Button在Activity中的資源標識符,添加Button監聽器,定義Button的點擊響應方法,在onClick()中使用Intent啟動另一個Activity,實現當單擊該按鈕時,頁面將跳轉到下一個Activity。
4.3 GPS定位模塊
在Android平臺下獲取GPS信息主要分為三步。首先,添加系統權限;其次,通過系統服務,取得LocationManager對象;最后,設置服務商的信息,并設置 Provider,得到位置提供器(可以指定具體的位置提供器;也可以提供一個標準集合,讓系統根據標準匹配最適合的位置提供器)。又由于是移動終端的緣故,就需要注冊一個位置監聽器 LocationManager以監聽定位信息改變,并設置更新周期為 2 000ms,之后再獲取當前的Location,表現為位置的經緯度信息,最后可將位置信息顯示在TextView中。
4.4 WiFi掃描模塊
首先,需要在AndroidManifest.xml文件中顯式地聲明兩個許可權限,分別是CHANGE_WIFI_STATE和ACCESS_WIFI_STATE。其后,為WiFi操作界面的掃描WIFI按鈕而使用setOnClickListener的方法添加一個監聽器,當按下此按鈕時,手機就開始掃描周圍的AP,并將掃描結果顯示出來。具體掃描過程如下:
(1)通過系統服務,實例化WifiMananger對象。
(2)使用WifiManager對象的startScan()方法啟動掃描。
(3)注冊對SCAN_RESULTS_AVAILABLE Intent的BroadcastReceiver。
(4)調用getScanResult()方法獲取ScanResult對象列表。
其中,ListwifiList=mainWifi.getScanResult()就是用來獲取掃描結果的。在列表中的信息主要有BSSID接入點的地址、SSID網絡名稱、Capabilities網絡的接入性能(主要用來判斷網絡的加密方式)、Frequency頻率及Level等級等。掃描結果顯示信息如圖6所示。
圖6 WiFi操作界面
Fig.6 The operating interface of WiFi4.5 手機連接WiFi模塊
掃描模塊中一般可掃描得到多個WIFI接入點,系統中以連接名為EECC-DC的網絡為例進行手機WIFI連接。具體連接過程如下:
(1)建立一個WifiConfiguration 對象wc。
(2)設置wc的SSID號為EECC-DC,再根據掃描結果列表中SSID為EECC-DC的網絡的相關信息配置wc的其他屬性信息。
(3)根據上述系統設計,配置wc的安全模式為WPA-PSK加密方式。
(4)調用addNetwork(wc)添加該網絡。
(5)調用enableNetwork(int netid,true)連接網絡。
(6)調用getDhcpInfo()方法獲得DHCP配置信息以完成連接過程。
(7)調用getWifiState()方法驗證已成功連接WIFI網絡。
(8)調用getConnectionInfo()方法獲得當前網絡的連接狀態,顯示WIFI連接信息。
手機成功連接WiFi網絡后的返回信息如圖6所示。
4.6 Socket通訊模塊
利用Socket進行Client/Server程序設計的常規連接過程是這樣的:Server端Listen(監聽)某個端口是否有連接請求,Client端向Server端發出Connect(連接)請求,Server端向Client端發回Accept(接受)消息。如此就建立了一個連接。Server端和Client端都可以通過Send,Receive等方法與對方通信。系統中使用的構造方法如下:
Socket(String ipaddress, int port);
ServerSocket(int port)。
4.7 數據管理模塊
數據庫模塊使用Java程序連接MySQL數據庫,實現將服務器端主程序獲得的GPS信息發送至數據庫中,并根據GPS信息檢索數據庫,再返回查找后的相關信息。具體操作過程如下:
(1)定義數據庫用戶名、密碼、驅動程序名driverName、聯結字符串URL。
(2)加載驅動程序,獲得Connection對象。
(3)利用Connection對象創建Statement對象,此時數據庫已成功連接。
(4)調用Statement對象的execute()、executeQuery()、executeUpdate()等方法操作數據庫,實現數據的查詢、插入、刪除等操作。
最后,將查詢后的結果信息通過Socket通訊模塊返回給手機客戶端,供用戶查詢使用。查詢結果如圖7所示。
圖7 WiFi操作界面