王雨澤
(南京市第一中學,江蘇 南京 210001)
Android是時下一個熱門名詞,它是Google公司發布的基于Linux的開源手機平臺,該平臺由操作系統、中間件和應用軟件組成,是第一個可以完全定制、免費、開發的移動設備操作平臺。Android平臺有豐富的應用程序,也大幅度降低了應用程序的開發費用。而且,Android底層使用開源的Linux操作系統,同時開放了應用程序開發工具,使所有程序開發人員都在統一、開放的開發平臺上進行開發,保證了Android應用程序的可移植性。
Android操作系統的系統架構像是在蛋糕店購買的一個多層蛋糕,在移動設備的硬件和用戶之間是Android軟件堆棧。Android軟件堆棧可以分為以下四個層次。
用戶在Android操作系統上執行的是應用程序,這也是用戶直接接觸的Android操作系統。基本上,Android默認內置一些核心應用程序,包含瀏覽器、日歷、通信錄和打電話等,所有Android應用程序都是使用Java語言開發的。
位于應用程序層之下的是應用程序框架層,這一層提供高級的建構組件,即用于創建Android應用程序的一組類集合,換句話說,應用程序框架代表Android操作系統實現的眾多Java類,我們只需調用適當對象的方法,或繼承指定類來擴展其功能,就可以快速創建Android應用程序。
Android運行時庫由Dalvik虛擬機和核心Java函數庫(提供了JAVA語言核心庫內的大部分功能)組成,Dalvik虛擬機是Google針對移動設備所實現的Java虛擬機,Android應用程序是使用Java語言編寫和編譯,在Dalvik VM上執行,換句話說,Java程序代碼在編譯成Java類文件后,還需轉換成Dalvik的Dex個是,才能在Dalvik虛擬機上執行。同時,Android提供了豐富的函數庫,負責支持應用程序框架各組件的執行,這是一些使用C/C++語言編寫的函數庫,包括瀏覽器引擎的WebKit、3D繪圖的OpenGL、數據庫的SQLite和支持多種媒體播放的函數庫。
Linux內核負責提供系統的核心服務,包括線程、低級的內存管理、網絡、進程管理、電源管理和硬件的驅動程序。
提起Google,人們最先想到的一定是它的搜索引擎,不過繼搜索引擎之后,Google地圖的影響力越來越大。在Android系統剛剛起步的時候,Google就看到了基于定位服務的應用潛力,并將Google地圖的成功經驗帶入了Android系統當中。很多基于定位功能的應用程序最終都需要顯示地圖,Google地圖已經可以非常成熟地顯示交互式地圖,其商業模式還允許第三方網站將Google地圖嵌入到自己的頁面中。Google地圖的大部分功能都可以在Android平臺上實現,Android平臺下的開發者可以將Google地圖嵌入到自己的應用程序中。
Google地圖是 Google 公司提供的電子地圖服務,包括局部詳細的衛星照片。能提供三種視圖:一是矢量地圖(傳統地圖),可提供政區和交通以及商業信息;二是不同分辨率的衛星照片(俯視圖,跟 Google Earth 上的衛星照片基本一樣);三是地形視圖,可以用以顯示地形和等高線。
本實例是以eclipse與android SDK為開發工具,開發一款在Android平臺上運行的Google地圖應用,具有注冊用戶,登陸的功能,能在屏幕上顯示出地圖,并能夠選擇普通模式和衛星模式,能夠具有定位功能,在地圖上完成標注點并繪制標注點之間的軌跡的功能。主要思路就是將Google API包加入至項目中,然后在顯示地圖的布局文件中添加顯示Google map的組件。并在顯示地圖Activity中添加圖層,實現標注點和繪制軌跡的功能。定位則是通過調用底層GPS服務,來獲得當前的位置信息。登陸與注冊功能則是和J2EE項目中的同類功能基本相同。
Android應用程序由Java語言編寫,因此我們選用開源的eclipse作為IDE,并安裝android SDK和AVD即可,在這里就不多贅述了,可查閱相關教程完成。
本實例只存儲一個用戶名與密碼即可,因此我們選用SharedPreference這種數據結構來存儲用戶名和密碼。Android平臺的應用開發,將功能實現與布局分開,即我們在java文件中實現功能,在xml文件中實現程序圖形界面的布局。我們在java代碼中如果需要用到布局文件中的某個按鈕(Button)或者是編輯框(EditText)等組件時,是通過這個組件在整個項目中的ID去訪問,在java程序初始化的時候,用 findViewById這么一個方法去訪問某個組件。按鈕控件我們需要添加單擊事件以及單擊響應時間。實現的部分代碼如下:

要顯示Google Map,我們需要在Google網站上申請一個Google API key, 并通過這個唯一的Google API key來“激活”我們所開發的應用程序。在Google上可以搜索到詳細教程步驟,在此也不贅述了。在獲取到密鑰后,我們在主布局中添加相應的xml代碼,就可以在屏幕上顯示Google地圖了。
實現定位功能的主要核心代碼如下:

在Google Map中我們可以定義一個圖層類(Overlay),并在這個圖層上繪制標注點以及標注點之間的軌跡。Canvas是Android.Graphics包中的一個類,顧名思義,就是畫布的意思,我們可以在canvas上繪制各種我們想要的圖像。除了在畫布上繪制之外,還需要設置一些關于畫布的屬性,比如,畫布的顏色、尺寸等。
繪制軌跡的時候通過Google map的一項服務功能,即向服務器發送兩個點之間的經緯度,然后從服務器返回路線,再在地圖上沿著街道繪制出可行的線路,即完成了導航的功能。從請求這個服務的URL中能夠看出,當mode=driving時,返回的線路是駕駛路線,這個時候考慮到車道的單雙向問題,可以為駕駛員提供單雙行道的路線信息,不會違法交通規則;而當mode=walking時,返回的路線是步行路線,這個時候考慮的則是街道是否允許步行什么地方有人行橫道等等。
這個功能的難點是在解析從服務器返回的xml文檔上,解析的主要代碼如下:

經過調試和修改后,實例部分運行的結果如下:

圖 地圖定位和繪制軌跡
Android手機應用程序開發著眼于它的整個體系構架,是一項復雜的工程。本文分析了Android體系的層次架構,并通過一個應用實例開發驗證了其平臺的可用性。下一步的工作是在此基礎上,結合用戶個性化的需求進行拓展開發,以提供更加個性化的服務。
[1]張波,趙雙明.基于Android平臺的百度地圖開發研究[J].軟件導刊,2015,14(7):96-98.
[2]張仕成.基于Google Android 平臺的應用程序開發與研究[J].電腦知識與技術.2009,5(28):7959-7962.
[3]柳林,唐新明等.移動終端位置服務系統的實現[J].計算機工程與設計,2007,28(5):1069-1071.
[4]Darcey,S.Android移動應用開發從入門到精通[M].北京:人民郵電出版社,2010.
[5]Menglee,W.Android編程入門經典[M].北京:清華大學出版社,2012.