基于android的智能導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  論文題目 基于Android的智能導(dǎo)航系統(tǒng)設(shè)計與實現(xiàn)</p><p>  專 業(yè) </p><p>  年 級 </p><p>  學(xué) 號 </p><p>  姓 名

2、</p><p>  指導(dǎo)老師 </p><p><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 課題背景1</p><p>  1.2 課題內(nèi)容1</p>&l

3、t;p>  1.3 課題目的及其意義2</p><p>  2 系統(tǒng)開發(fā)環(huán)境及相關(guān)技術(shù)2</p><p>  2.1 Android開發(fā)介紹與環(huán)境搭建2</p><p>  2.2 JSON簡介3</p><p>  2.3 Struts2框架簡介與環(huán)境搭建3</p><p>  2.4 Baidu M

4、aps API簡介4</p><p><b>  3 系統(tǒng)分析4</b></p><p>  3.1 研究目標(biāo)4</p><p>  3.2 需求分析4</p><p>  3.3 性能分析5</p><p><b>  4 系統(tǒng)設(shè)計5</b></p>

5、<p>  4.1 用戶界面設(shè)計5</p><p>  4.2 數(shù)據(jù)庫設(shè)計6</p><p>  4.3 程序模塊設(shè)計8</p><p>  5 系統(tǒng)功能模塊設(shè)計9</p><p>  5.1 文件結(jié)構(gòu)與用途9</p><p>  5.2 后臺定位服務(wù)11</p><p&g

6、t;  5.3 MapApplication.java類13</p><p>  5.4 登錄模塊15</p><p>  5.5 首頁模塊15</p><p>  5.6 導(dǎo)航模塊20</p><p>  5.7 周邊信息查詢模塊21</p><p>  5.8 個人資料模塊23</p>&

7、lt;p><b>  6 系統(tǒng)測試25</b></p><p><b>  7 總結(jié)26</b></p><p><b>  參考文獻(xiàn)27</b></p><p><b>  致 謝28</b></p><p>  基于Android的智能

8、導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)</p><p>  摘 要:本文首先分析討論Android手機(jī)軟件開發(fā)主要技術(shù),以及國內(nèi)景區(qū)導(dǎo)游系統(tǒng)與智能導(dǎo)游的現(xiàn)狀。然后講述了基于百度地圖Android SDK以及定位SDK技術(shù)所設(shè)計的Android平臺智能導(dǎo)游系統(tǒng)的實現(xiàn)。該系統(tǒng)設(shè)計實現(xiàn)了后臺定位、景點導(dǎo)航、景點信息瀏覽與下載、周邊查詢等實用功能,具有良好的通用性與靈活性。</p><p>  關(guān)鍵字:Andro

9、id;智能導(dǎo)游;導(dǎo)航軟件;移動開發(fā);百度地圖</p><p><b>  1 緒論</b></p><p><b>  1.1 課題背景</b></p><p>  中國工業(yè)和信息部最新公布數(shù)據(jù)表明,中國智能手機(jī)的市場增長率不斷攀升,而且,隨著移動3G和Wifi熱點的不斷覆蓋,用戶對手機(jī)的互動娛樂體驗也提出了更高要求,各種

10、應(yīng)用軟件開始進(jìn)入,手機(jī)日漸成為互動娛樂的焦點。</p><p>  有關(guān)資料顯示,我國的旅游業(yè)發(fā)展實力巨大。首先,是旅游收入增長迅速:2013年春節(jié)黃金周全國接待游客達(dá)到2.03億人次,實現(xiàn)旅游收入1170.6億元人民幣,同比增長達(dá)到15.1%和15.4%[1];其次,固定資產(chǎn)投入力度的不斷加大:2009年12月,《關(guān)于加快發(fā)展旅游業(yè)意見》首次提出“中國旅游日”的概念,旅游業(yè)已經(jīng)出現(xiàn)在了中國國家戰(zhàn)略性產(chǎn)業(yè)中。&l

11、t;/p><p>  然而,國內(nèi)旅游業(yè)的迅猛發(fā)展使得傳統(tǒng)的人工導(dǎo)游方式不能滿足新時代用戶的多元化需求。長期以來,游客在景點旅游時只能走馬觀花,對景點的多媒體信息了解甚少,就本人經(jīng)驗來說,對于外來游客來說更會由于語言的障礙而使得游覽質(zhì)量下降!于是,基于上述,手機(jī)終端的智能導(dǎo)游應(yīng)用便應(yīng)運而生。</p><p><b>  1.2 課題內(nèi)容</b></p>&l

12、t;p>  本課題結(jié)合現(xiàn)代景區(qū)的相關(guān)特性和用戶需求,使用JAVA語言,應(yīng)用百度地圖、百度定位(GPS+基站)、JSON數(shù)據(jù)交換和無線通訊等技術(shù),開發(fā)一個基于Android的C/S式智能導(dǎo)航軟件系統(tǒng)。這軟件使得用戶可以利用無線網(wǎng)絡(luò)以及手機(jī)的便捷性無時無刻地享受到景點信息查詢、自身位置查詢、周邊查詢、導(dǎo)航等功能所帶來的暢快旅游體驗。</p><p>  1.3 課題目的及其意義</p><p

13、>  本課題的主要目的是將Javaweb后臺服務(wù)端、百度地圖、定位導(dǎo)航技術(shù)與景區(qū)導(dǎo)游相結(jié)合,從而實現(xiàn)景區(qū)導(dǎo)游系統(tǒng)的真正智能化。智能導(dǎo)游系統(tǒng)可以儲存大量的景區(qū)景點信息,不僅可以廣泛傳播,而且科學(xué)環(huán)保、方便快捷。此外,系統(tǒng)還提供了自定位、導(dǎo)航的實用功能,讓用戶可以徹底拋棄紙質(zhì)地圖,減少路癡的認(rèn)路障礙。這不僅能直接為游客帶來更暢快的旅游體驗,同時還完善了景區(qū)的旅游管理體制。</p><p>  2 系統(tǒng)開發(fā)環(huán)境及

14、相關(guān)技術(shù)</p><p>  2.1 Android開發(fā)介紹與環(huán)境搭建</p><p>  Android是Google公司開發(fā)的基于Linux內(nèi)核的開源操作系統(tǒng)。它包括:操作系統(tǒng)、用戶界面和應(yīng)用程序,而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙[2]。</p><p>  Android 系統(tǒng)提供了四大基本組件,包括:Activity、Contentprovid

15、e、Service、Intentreceiver,每個組件都是一個視圖(view)。但上述四大組件對于一個Android應(yīng)用程序來說,卻并不是必須的,可能只需要其中的幾種酒可以滿足設(shè)計需求。Manifext.xml配置文件時Android應(yīng)用程序不可或缺的一個XML配置文件,其中定義了程序所用到的組件、組件功能以及一些必要條件和權(quán)限。</p><p>  Android的上層應(yīng)用程序一般是由java語言開發(fā),所以

16、首先應(yīng)該有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)以及Java主流集成開發(fā)環(huán)境Eclipse IDE。此外,還需要Android開發(fā)專用Google提供的Android SDK和安裝在Eclipse的插件Android ADT,為Android開發(fā)提供開發(fā)工具的升級或者變更,是Eclipse下開發(fā)工具的升級下載的工具[3]。</p><p>  And

17、roid開發(fā)平臺搭建步驟[4]:</p><p>  (1)首先到http://www.eclipse.org/downloads/下載Eclipse集成開發(fā)環(huán)境并且解壓,這里推薦下載Java EE 集成版本,可以為平臺的搭建省下不少工作。接著再去http://java.sun.com/javase/downloads/index.jsp 站點下載SDK后安裝,下載http://dl.google.com/and

18、roid/android-sdk-windows-1.5_r1.zip,Android SDK1.5后解壓。</p><p>  (2)雙擊Eclipse解壓后目錄中的eclipse.exe然后啟動,選擇Eclipse菜單中的Help-> Install New Software-> 選項卡上的Available Software,點擊右側(cè)的“Add”輸入http://dl-ssl.google.co

19、m/android/eclipse/后確定,然后在“Work with”下拉菜單中選擇剛才輸入的網(wǎng)址。過一會就會出現(xiàn)一個Developer Tools選項,勾上以后點擊Next以后Eclipse會自動網(wǎng)上查找Android 開發(fā)工具插件,然后找到Android DDMS和Android Development Tools,選中這兩個點擊Finish,Eclipse就會自動下載并安裝Android插件了,最后會提示重啟Eclipse。&l

20、t;/p><p>  (3)重啟后選擇Eclipse菜單中的Windows-> Preferences 在左側(cè)的Android項目中SDK Location中填入Android SDK解壓后的目錄,然后點擊Apply。</p><p>  (4)在Windows7的系統(tǒng)變量中的path變量中添加一個值,該值指向解壓后的Android SDK目錄下的tools文件夾。</p>

21、<p>  2.2 JSON簡介</p><p>  JSON(javaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它基于javascript卻采用了完全獨立于語言的文本格式。JSON基于“名稱/值”對的集合和值的有效序列表這兩種格式,用JSON表示一組值時不但可以減少復(fù)雜性也能提高可讀性,是網(wǎng)絡(luò)編程中數(shù)據(jù)交換的常用格式。</p><p>  2.

22、3 Struts2框架簡介與環(huán)境搭建</p><p>  Struts是采用Java Servlet/JavaServer Pages技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的Framework。采用Struts能開發(fā)出基于MVC(Model-View-Controller)設(shè)計模式的應(yīng)用構(gòu)架。而Struts2是在原有Struts和Webwork的技術(shù)基礎(chǔ)上進(jìn)行合并的全新的框架,其體系結(jié)構(gòu)而原有Strcts差異巨大。S

23、tructs2是以Webwork為核心,采用攔截器機(jī)制來處理用戶請求,這樣的設(shè)計也使得業(yè)務(wù)邏輯能夠與Servlet API完全分離,使應(yīng)用結(jié)構(gòu)更為合理。</p><p>  Struts2框架的開發(fā)需要使用Myeclipse集成開發(fā)環(huán)境。由于Myeclipse是Eclipse的一個插件,所以在這忽略Eclipse的安裝。</p><p>  Myeclipse的安裝:首先應(yīng)該到http:/

24、/www.myeclipseide.com/index.php? name =Downloads&req=viewsdownload&sid=15下載文件MyEclipse_5.5.1GA_E3.2.2_ FullStackInstaller.exe并安裝。安裝完畢后將其安裝目錄下的feature和plugin兩個目錄覆蓋到Eclipse的安裝目錄下,最后卸載剛才安裝的Myeclipse[5]。</p>&

25、lt;p>  Tomcat應(yīng)用服務(wù)器的安裝:首先,到http://www.cuku.net/show.php/309.html選擇與自己JDK匹配的Tomcat 安裝文件,在安裝時選擇路徑把路徑選到JDK的安裝路徑下的jre。最后配置環(huán)境變量:在“我的電腦”上點右鍵—>“屬性”—>“高級”—> “環(huán)境變量(N)”。 新建系統(tǒng)變量CATALINA_HOME:C:\Program Files\Apache Softw

26、are Foundation\Tomcat 5.5(我的tomcat安裝目錄,你寫你自己的) 在系統(tǒng)變CLASSPATH的值的后面加入:%CATALINA_HOME%\common\lib; 在系統(tǒng)變量Path的值中"%JAVA_HOME%\bin;"的后面加入以下內(nèi)容:%CATALINA_HOME%\bin; 到這里,Tomcat安裝完畢[6] 。</p><p>  Structs2框架的

27、搭建,包括以下步驟:首先創(chuàng)建web項目并導(dǎo)入Structs2所需要的包struts2 –core-2.2.1.1.jar、xwork-core-2.2.1.1.jar、commons–fileupload-1.2. 1.jar comm.ons-io-1. 3.2.jar、freemarker-2.3.16.jar、ognl-3.0.jar、javassist-3.7.ga.jar;配置Structs在當(dāng)前web項目中,在web.xml

28、中配置Struts2所需的核心過濾器。</p><p>  2.4 Baidu Maps API簡介</p><p>  百度地圖API是為開發(fā)者免費提供的一套基于百度地圖服務(wù)的應(yīng)用接口,包括JavaScript API、Web服務(wù)API、Android SDK、iOS SDK、定位SDK、車聯(lián)網(wǎng)API、LBS云等多種開發(fā)工具與服務(wù),提供基本地圖展現(xiàn)、搜索、定位、逆/地理編碼、路線規(guī)劃、L

29、BS云存儲與檢索等功能,適用于PC端、移動端、服務(wù)器等多種設(shè)備,多操作系統(tǒng)下的地圖應(yīng)用開發(fā)[7]。</p><p><b>  3 系統(tǒng)分析</b></p><p><b>  3.1 研究目標(biāo)</b></p><p>  (1) 學(xué)習(xí)熟悉Android應(yīng)用程序的框架、開發(fā)過程;</p><p> 

30、 (2) 學(xué)習(xí)熟悉Struts2框架、開發(fā)過程;</p><p>  (3) 基于Android的智能導(dǎo)游軟件主要實現(xiàn)Android系統(tǒng)訪問服務(wù)端,利用基于JAVA的網(wǎng)絡(luò)編程(Apache HttpClient項目)與Webservice調(diào)用,針對手機(jī)所在的地理位置,實時查詢相關(guān)景點的基本信息與天氣信息,并智能導(dǎo)航;</p><p>  (3) 學(xué)習(xí)熟悉基于Android的地圖GIS開發(fā)。

31、</p><p><b>  3.2 需求分析</b></p><p>  本軟件是一個基于Android的智能導(dǎo)游系統(tǒng),故使用者應(yīng)該為成分構(gòu)成比較廣泛的游客,所以UI必須簡潔大方,有顯淺易懂。而要實現(xiàn)智能導(dǎo)游,首先就必須要求軟件起碼如人工導(dǎo)游般,能夠為用戶提供景點的基本信息講解、位置描述、導(dǎo)航等服務(wù)考慮到景區(qū)信息與用戶信息等的數(shù)據(jù)量可能十分巨大,本系統(tǒng)應(yīng)該使用本地/

32、服務(wù)器模式以節(jié)省用戶的移動設(shè)備儲存空間以及數(shù)據(jù)流量。綜上所述,本系統(tǒng)應(yīng)該完成以下功能:</p><p>  (1) 采用C/S模式,基于Struts2框架服務(wù)端儲存用戶信息以及顯示地圖所必須的靜態(tài)信息,供Android客戶端的查詢?yōu)g覽與下載;</p><p>  (2) 用戶信息管理,包括:登錄與注冊、本地景點信息的管理;</p><p>  (3) 以城市為基本

33、的景點信息查詢與模糊查詢,包括:名稱、地址、圖片、經(jīng)緯度、票價及其優(yōu)惠活動等,并提供景點信息的本地緩存、下載;</p><p>  (4) 用戶自定位,景點位置的地圖顯示與導(dǎo)航;</p><p>  (5) 周邊餐飲、衛(wèi)生間、住宿、醫(yī)院、加油站等信息的查詢。</p><p><b>  3.3 性能分析</b></p><p

34、>  本項目的目標(biāo)是提升游客的旅游體驗,所以對程序的性能要求較高,程序應(yīng)該具有以下的良好性能:</p><p>  (1) 響應(yīng)速度快。</p><p><b>  (2) 安全性高</b></p><p>  (3) 信息處理速度快</p><p><b>  4 系統(tǒng)設(shè)計</b></

35、p><p>  4.1 用戶界面設(shè)計</p><p>  根據(jù)設(shè)計,本軟件系統(tǒng)有以下幾個界面:登錄界面、景點查詢綜合界面、景點信息顯示界面、景點信息本地收藏界面、周邊查詢界面、景點導(dǎo)航界面。</p><p>  景點查詢綜合界面是軟件的首頁,其主體是百度地圖。它能根據(jù)當(dāng)前城市(自選或定位默認(rèn))或模糊查詢用百度地圖顯示出景點的分布情況。</p><p&

36、gt;  景點信息顯示界面為用戶顯示當(dāng)前景點的詳細(xì)情況,包括:名稱、地址、電話、門票、優(yōu)惠、簡介、圖片等資料,并能根據(jù)用戶意愿選擇下載當(dāng)前景點信息。</p><p>  景點信息本地收藏界面,其主體是一個ListView。它能夠顯示出用戶的本地景點信息,并實現(xiàn)管理(刪除)。</p><p>  周邊查詢界面,其主體是一個百度地圖。用戶可以通過它來查詢到周邊諸如餐飲、酒店、加油站等信息。&l

37、t;/p><p>  景點導(dǎo)航界面,其主體是一個百度地圖。它可以為用戶進(jìn)行實時導(dǎo)航服務(wù)。</p><p>  根據(jù)對用戶界面顯示內(nèi)容的分析,繪制出用戶界面的草圖,如圖4-1、4-2所示。</p><p>  圖4-1 用戶界面草圖</p><p>  圖4-2 用戶界面草圖</p><p><b>  4.2 數(shù)

38、據(jù)庫設(shè)計</b></p><p>  本軟件中有一下數(shù)據(jù)需要存儲:用戶信息、景點信息、景點信息收藏、全國城市名稱??紤]到用戶信息與景點信息的龐大數(shù)據(jù)量,本系統(tǒng)將其存儲在服務(wù)器端的MySQL數(shù)據(jù)庫,需要時再請求;城市名稱數(shù)據(jù)量較少,為減少用戶數(shù)據(jù)流量,將其存儲在手機(jī)的SQLite數(shù)據(jù)庫中;而景點信息收藏則存放于SD卡的文件中,綜上所述,本系統(tǒng)數(shù)據(jù)庫設(shè)計如下:</p><p>  

39、在服務(wù)端的MySQL數(shù)據(jù)庫中建立新數(shù)據(jù)庫maps_traverse,并建立新表,包括用戶信息表gpsuser和景點信息表spot。</p><p>  如表4-1和表4-2所示。</p><p>  表4-1用戶信息表gpsuser的結(jié)構(gòu)</p><p>  表4-2 景點信息表spot的結(jié)構(gòu)</p><p>  由于全國城市的分布是相對固定

40、的,為了減少操作的麻煩,本軟件直接將整個城市數(shù)據(jù)庫city.s3db導(dǎo)入到Android項目的res/raw目錄中,直接使用。其中包括省表province,城市表city。</p><p>  如表4-3和表4-4所示。</p><p>  表4-3省表province的結(jié)構(gòu)</p><p>  表4-2 城市表city的結(jié)構(gòu)</p><p>

41、;  從設(shè)計思路上考慮,儲存在手機(jī)本地的景點信息收藏數(shù)據(jù)包括JSON文本和JPG格式的圖片,將其直接寫入SD卡目錄以指定規(guī)則命名的目錄,此方案可以簡化對其的讀寫操作。</p><p>  4.3 程序模塊設(shè)計</p><p>  從功能需求上分析,整個軟件應(yīng)劃分為首頁、個人資料、導(dǎo)航、周邊查詢,四個模塊。</p><p>  首頁負(fù)責(zé)景點信息的各類查詢、城市的切換、

42、定位,是整個軟件的核心;個人資料模塊負(fù)責(zé)管理用戶的信息以及本地景點數(shù)據(jù);導(dǎo)航負(fù)責(zé)對用戶進(jìn)行景點、指定位置的目的地導(dǎo)航;周邊查詢負(fù)責(zé)為用戶提供周邊信息的查詢。系統(tǒng)模塊功能圖如圖4-2。</p><p>  圖4-2 系統(tǒng)模塊功能圖</p><p>  5 系統(tǒng)功能模塊設(shè)計</p><p>  5.1 文件結(jié)構(gòu)與用途</p><p>  在程序開

43、發(fā)階段,首先確定“基于Android的智能導(dǎo)游系統(tǒng)”的工程名為guidemap。工程源代碼的結(jié)構(gòu)如圖5-1所示。</p><p>  為了使源代碼文件的結(jié)構(gòu)更加清晰,guidemap工程設(shè)置了多個命名空間,分別用來保存用戶界面、數(shù)據(jù)庫、后臺服務(wù)和工具實體的源代碼文件,源代碼文件的名稱以及說明如表5-1所示。</p><p>  圖5-1 guidemap工程的源代碼文件</p>

44、<p>  表5-1 guidemap工程的文件用途說明</p><p>  Android的資源文件保存在/res的子目錄中。/res/drawable/目錄中保存的是圖像文件,/res/values目錄中保存的是用來自定義字符串和選項列表的文件;/res/layout目錄中保存的是布局XML文件;/res/raw保存的是城市信息數(shù)據(jù)庫文件;而/res/anim保存的是動畫效果文件。所有在程序開發(fā)

45、階段可以被調(diào)用的資源都保存在這些目錄中AndroidManifest.xml文件主要是Activity、Service類的注冊和相關(guān)權(quán)限的許可設(shè)置。</p><p>  5.2 后臺定位服務(wù)</p><p>  GetLocationService.java類的后臺定位服務(wù)是整個軟件的基礎(chǔ),它綁定在軟件的Application,從軟件運行開始,貫穿整個軟件生命周期的始末。其主要功能是不斷為

46、系統(tǒng)提供實時的所在經(jīng)緯度以及所在城市,并存放到公共類Constants的City變量。</p><p>  考慮到本應(yīng)用的用戶對象主要為國內(nèi)用戶,在地圖方案上采用了由百度公司開發(fā)的免費地圖Baidu Maps API。而定位方案采用了Baidu Location API,通過調(diào)用此API來實時獲取當(dāng)前位置坐標(biāo)將其存入Binder類中,而當(dāng)前城市信息的獲取通過百度地圖SDK中MKSearch來獲取。</p&g

47、t;<p>  此模塊的實現(xiàn)流程圖如圖5-2所示。</p><p><b>  其核心代碼如下。</b></p><p>  MapApplication app = (MapApplication) this.getApplication();</p><p>  if (app.bMap == null) </p>

48、;<p><b>  {</b></p><p>  app.bMap = new BMapManager(getApplication());</p><p>  app.bMap.init(app.MAP_KEY,new MapApplication.MyGeneralListener());</p><p><b>

49、;  }</b></p><p>  圖5-2 后臺定位服務(wù)模塊功能流程圖</p><p>  app.bMap.start();</p><p>  final MKSearch mMKSearch = new MKSearch();</p><p>  mMKSearch.init(app.bMap, new GeoCoder

50、Parser());</p><p>  Log.d("service map", "started");</p><p>  mLocationListener = new LocationListener() {</p><p><b>  @Override</b></p><p

51、>  public void onLocationChanged(Location location) </p><p><b>  {</b></p><p>  //Log.d(TAG, "location change");</p><p>  if (location != null) </p>

52、<p><b>  {</b></p><p>  String strLog = String.format("經(jīng)度:%f\r\n" + "緯度:%f", location.getLongitude(),location.getLatitude());</p><p>  pt = new GeoPoint((int

53、)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));</p><p>  mMKSearch.reverseGeocode(pt);</p><p>  app.setPt(pt);</p><p><b>  }</b></p><

54、p><b>  else</b></p><p><b>  {</b></p><p>  Log.v("Service", "getLocation error!");</p><p><b>  }</b></p><p>&

55、lt;b>  }};</b></p><p>  MKSearch的查詢結(jié)果在GeoCoderParse.onGetResult方法中給出。</p><p>  public void onGetAddrResult(MKAddrInfo arg0, int arg1) </p><p><b>  {</b></p&g

56、t;<p>  if (arg1 != 0) </p><p><b>  {</b></p><p>  String str = String.format("%d", arg1);</p><p>  Log.d(TAG, str);</p><p><b>  retu

57、rn;</b></p><p><b>  }</b></p><p>  MKGeocoderAddressComponent address = arg0.addressComponents;</p><p>  Constants.CITY=address.city;</p><p>  Log.d(T

58、AG, "Location info:" + address.province + address.city + address.district+address.street+address.streetNumber);</p><p><b>  }</b></p><p>  5.3 MapApplication.java類</p>

59、;<p>  該類是整個軟件的基石,它綁定了后臺定位服務(wù),初始化了百度地圖SDK,諸如:BMapManager、MKSearch、MKSearchListener等公共類,避免了各Activity之間的沖突與提高了系統(tǒng)的流暢性,它還定義了軟件的公共變量。綜上,系統(tǒng)可以通過它來控制著整個軟件的行為。其核心代碼如下。</p><p>  首先,應(yīng)該在androidmanifest.xml文件中聲明。&l

60、t;/p><p>  <application</p><p>  android:icon="@drawable/ic_launcher"</p><p>  android:label="@string/app_name"</p><p>  android:hardwareAccelerated

61、="false" </p><p>  android:theme="@style/AppTheme" android:name="com.guidemap.control.MapApplication"></p><p>  綁定后臺服務(wù)以及初始化百度地圖。</p><p>  MapApplica

62、tion mApp=this;</p><p>  bMap=new BMapManager(mApp);</p><p>  boolean is=bMap.init(MAP_KEY, new MyGeneralListener());</p><p><b>  if(is)</b></p><p><b>

63、;  {</b></p><p>  //設(shè)置定位監(jiān)聽時間間隔</p><p>  bMap.getLocationManager().setNotifyInternal(5, 2);bMap.getLocationManager().enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);</p><

64、;p>  bMap.getLocationManager().enableProvider(MKLocationManager.MK_GPS_PROVIDER);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

65、/p><p>  Toast.makeText(this, "地圖DSK啟動失敗",Toast.LENGTH_LONG).show();</p><p><b>  }</b></p><p>  final Intent intent=new Intent();</p><p>  intent.set

66、Action("com.guidemap.ss");bindService(intent, scon, Service.BIND_AUTO_CREATE);</p><p>  其中,MyGeneralListener()類的作用在于在初始化百度地圖SDK時檢測錯誤的發(fā)生,并為用戶提供提醒服務(wù)。</p><p>  用于為用戶提供導(dǎo)航、周邊信息搜索的MKSearch關(guān)

67、鍵代碼如下(由于篇幅問題,此處只寫出了代碼框架,具體流程在導(dǎo)航、周邊信息查詢模塊處給出)。</p><p>  MKSearch mKSearch=new MKSearch();</p><p>  mKSearch.init(app.bMap, new MKSearchListener() {</p><p><b>  @Override</

68、b></p><p>  public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}</p><p><b>  @Override</b></p><p>  public void onGetTransitRouteResult(MKTrans

69、itRouteResult arg0, int arg1) {}</p><p><b>  @Override</b></p><p>  public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1)</p><p><b>  {}</b>&l

70、t;/p><p><b>  @Override</b></p><p>  public void onGetRGCShareUrlResult(String arg0, int arg1)</p><p><b>  {}</b></p><p><b>  @Override</b

71、></p><p>  public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) </p><p><b>  {}</b></p><p><b>  @Override</b></p><p>  public voi

72、d onGetPoiDetailSearchResult(int arg0, int arg1) </p><p><b>  {}</b></p><p><b>  @Override</b></p><p>  public void onGetDrivingRouteResult(MKDrivingRouteRes

73、ult arg0, int arg1) {}</p><p><b>  @Override</b></p><p>  public void onGetBusDetailResult(MKBusLineResult arg0, int arg1)</p><p><b>  {}</b></p><

74、p><b>  @Override</b></p><p>  public void onGetAddrResult(MKAddrInfo arg0, int arg1) </p><p><b>  {}</b></p><p><b>  });</b></p><p&

75、gt;<b>  5.4 登錄模塊</b></p><p>  登錄模塊是整個系統(tǒng)的門戶,在現(xiàn)實中它的功能是否健全關(guān)系到整個系統(tǒng)給用戶的第一印象。在這個系統(tǒng)中,登錄模塊主要為用戶提供賬號登錄與注冊,記住最后一次賬號與密碼,對系統(tǒng)進(jìn)行GPS、WIFI等狀態(tài)的檢測,以及系統(tǒng)權(quán)限等功能。其界面圖如圖5-3所示。</p><p>  圖5-3 登錄界面圖 </p>

76、<p>  當(dāng)用戶打開系統(tǒng),首先便進(jìn)入這個登錄界面。假如用戶上一次成功登錄并勾選記住密碼,則系統(tǒng)會自動為用戶填上上一次登錄所用賬號密碼。與此同時,該模塊后臺會自動檢測當(dāng)前手機(jī)的GPS、WIFI網(wǎng)絡(luò)狀態(tài),因為系統(tǒng)所實現(xiàn)的功能是基于上述兩種功能的,假如檢測到上述狀態(tài)為關(guān)閉時會提示打開。當(dāng)用戶輸入正確賬號信息時,系統(tǒng)便會跳轉(zhuǎn)至系統(tǒng)主界面。在注冊功能中,用戶可以填寫賬號、密碼、E-mail等信息,注冊成功的條件是輸入的賬號不重復(fù),

77、各類輸入格式正確。</p><p>  其中,登錄的功能流程圖如圖5-4所示。</p><p>  圖5-4 登錄功能流程圖 </p><p><b>  5.5 首頁模塊</b></p><p>  由上述可知,首頁模塊是軟件功能的核心,正是它奠定了軟件的屬性:智能導(dǎo)游。它由兩個核心界面構(gòu)成:主界面、景點信息界面。&l

78、t;/p><p>  其對應(yīng)的界面圖如圖5-5所示。</p><p>  圖5-5 首頁界面圖</p><p>  首先,用戶一旦登錄成功后,系統(tǒng)就會根據(jù)定位信息向服務(wù)端的MySQL數(shù)據(jù)</p><p>  庫請求當(dāng)?shù)氐木包c數(shù)據(jù),并將其顯示在地圖上。此后,用戶可以根據(jù)需要,使用以下功能:(1)、模糊搜索,在輸入框中輸入用戶需要了解的景點名稱,系統(tǒng)

79、就會將其單獨顯示出來然后將其置于地圖中心;(2)、切換城市,系統(tǒng)默認(rèn)城市是用戶當(dāng)前所在城市,如果需要,用戶可以實時切換城市以了解更多景點;(3)、查詢、下載景點詳細(xì)信息。</p><p>  其模塊功能流程圖如圖5-6所示。</p><p>  為了更好地處理想Web站點請求,包括處理Session、Cookie等細(xì)節(jié)問題,Apache開源組織提供了一個HttpClient項目,作為一個簡

80、單的Http客戶端(而不是瀏覽器)。它可以用于發(fā)送HTTP請求,接受HTTP響應(yīng)[8]。由于本系統(tǒng)需要從服務(wù)端遠(yuǎn)程獲取景點信息,我采用這個Apache HttpClient,數(shù)據(jù)格式采用JSON,從服務(wù)端獲取信息的核心方法如下。</p><p>  public static String doGet(String url,Context context)</p><p><b>

81、;  { </b></p><p><b>  //判斷網(wǎng)絡(luò)</b></p><p>  if(checkNetwork(context)==false)</p><p><b>  {</b></p><p>  return null;</p><p>

82、<b>  }else</b></p><p><b>  {</b></p><p>  HttpGet httpget =new HttpGet(url);</p><p>  BasicHttpParams httpParams = new BasicHttpParams(); </p><p&

83、gt;  HttpConnectionParams.setConnectionTimeout(httpParams, 5000);</p><p>  圖5-6 景點信息標(biāo)注功能流程圖</p><p>  HttpConnectionParams.setSoTimeout(httpParams, 5000); </p><p>  HttpClient httpc

84、liend=new DefaultHttpClient(httpParams);</p><p>  String result=new String();</p><p><b>  try {</b></p><p>  HttpResponse httpresponse=httpcliend.execute(httpget);</p

85、><p>  HttpEntity httpentity= httpresponse.getEntity();</p><p>  InputStream inputstream= httpentity.getContent();</p><p>  BufferedReader buff=new BufferedReader(new InputStreamReader

86、(inputstream));</p><p>  String line=new String();</p><p>  while((line=buff.readLine())!=null)</p><p><b>  {</b></p><p>  result=result+line;</p>

87、<p><b>  }</b></p><p>  //System.out.println(result);</p><p>  } catch (Exception e) {</p><p>  // TODO Auto-generated catch block</p><p>  e.printSta

88、ckTrace();</p><p>  result=null;</p><p><b>  }</b></p><p>  return result;</p><p><b>  }</b></p><p><b>  }</b></p>

89、;<p>  根據(jù)信息將景點標(biāo)注:</p><p>  public OverItemT(Drawable marker, MapsActivity context, ArrayList<Spot> slist) {</p><p>  super(boundCenterBottom(marker));</p><p>  // TODO

90、Auto-generated constructor stub</p><p>  this.marker=marker;</p><p>  this.slist=slist;</p><p>  this.ma=context;</p><p>  //根據(jù)gplist來制作OverlayItem</p><p>

91、  List<GeoPoint> lgp=new ArrayList<GeoPoint>();</p><p>  OverlayItem ot;</p><p>  for(Spot spot:slist)</p><p><b>  {</b></p><p>  Log.e("ge

92、tLayer", String.valueOf(spot.getPoi().getLat())+"+"+String.valueOf(spot.getPoi().getLng()));</p><p>  lgp.add(new GeoPoint((int)(spot.getPoi().getLat()*1e6),(int)(spot.getPoi().getLng()*1e6)))

93、; </p><p><b>  }</b></p><p>  for(int i=0;i<lgp.size();i++)</p><p><b>  {</b></p><p>  GeoPoint gp=(GeoPoint)lgp.get(i); if(&

94、quot;null".equals(slist.get(i).getFavourableinfo()))</p><p><b>  {</b></p><p>  ot=new OverlayItem(gp,slist.get(i).getName()+"(※優(yōu)惠景點)","gpoint"+i);</p>

95、<p><b>  }</b></p><p><b>  else</b></p><p>  ot=new OverlayItem(gp,slist.get(i).getName(),"gpoint"+i);</p><p><b>  if(i==0)</b>&

96、lt;/p><p>  setFirstSpot(gp);</p><p>  mGeoList.add(ot);</p><p><b>  } </b></p><p>  populate();//更新</p><p><b>  }</b></p><

97、;p><b>  5.6導(dǎo)航模塊</b></p><p>  導(dǎo)航模塊,顧名思義,它的設(shè)計目標(biāo)是為游客提供景點的導(dǎo)航服務(wù),它彌補(bǔ)了人工導(dǎo)游難以隨時為旅游指路的缺點,豐富了導(dǎo)游的服務(wù),讓游客可以更加方便地在旅游區(qū)瀏覽。導(dǎo)航模塊界面如圖5-7所示。</p><p>  圖5-7 導(dǎo)航模塊界面圖</p><p>  此模塊設(shè)計了兩種功能:任意地

98、點的導(dǎo)航和指定景點的導(dǎo)航。而每種導(dǎo)航功能可以為旅游查詢出三種路徑:公交車、自駕、步行。在導(dǎo)航方案的選擇上,本模塊采用了基于Baidu Maps API的MKSearch與MKSearchListener。當(dāng)用戶將搜索條件輸入系統(tǒng)時,系統(tǒng)即調(diào)用MKSearch中的TransitSearch(String city,MKplanNode start, MKplanNode end) 或WalkingSearch(String startC

99、ity,MK planNode start, String endCity,MKplanNode end)發(fā)起搜索,得到信息后為用戶在地圖顯示出路徑。導(dǎo)航模塊功能流程圖如圖5-8所示。</p><p>  圖5-8 導(dǎo)航模塊功能流程圖</p><p>  5.7 周邊信息查詢模塊</p><p>  周邊信息查詢模塊為用戶提供了對某城市一定范圍內(nèi)的諸如餐飲、衛(wèi)生間、

100、加油站、酒店等豐富信息等關(guān)鍵詞的查詢。</p><p>  周邊信息查詢模塊界面如圖5-9所示。</p><p>  根據(jù)設(shè)計,用戶可以指定搜索中心點(定位或自定義)、范圍、搜索的Point類型,例如:肇慶學(xué)院圖書館、范圍1000m、類型酒店,系統(tǒng)即可為用戶查詢到在肇慶學(xué)院圖書館周邊1000m范圍內(nèi)的酒店。</p><p>  如導(dǎo)航模塊一般,采用了基于Baidu

101、Maps API的MKSearch與MKSearchListener。當(dāng)用戶將搜索條件輸入系統(tǒng)時,系統(tǒng)即調(diào)用MKSearch中的</p><p>  poiSearchNearby(String key,GeoPoint ptLB,int radius),方法發(fā)起周邊Point搜索。</p><p>  圖5-9 周邊信息查詢模塊界面圖</p><p>  周邊信息

102、查詢模塊功能流程圖如圖5-10所示。</p><p>  圖5-10 周邊信息查詢模塊功能流程圖</p><p>  5.8 個人資料模塊</p><p>  個人資料管理模塊為用戶提供了個人信息查詢更新、個人景點收藏的查詢與管理功能,其主要布局界面有兩個,如圖5-11所示。</p><p>  圖5-11 個人資料模塊界面圖</p&g

103、t;<p>  當(dāng)用戶選中“我的”選項卡后,進(jìn)入此模塊主界面。用戶可以在此模塊查看的個人賬號信息,包括賬號、郵箱、注冊時間、賬號權(quán)限,并可以根據(jù)需要進(jìn)行包括賬號名、郵箱、密碼在內(nèi)的信息修改,而在我的收藏方面,界面以Listview方式羅列了用戶收藏在本地的景點信息,可以讓用戶得以查看自己收藏到本地的景點信息,同時也可以通過特定手勢對其進(jìn)行刪除操作。</p><p>  模塊主界面的個人資料信息刷新、

104、信息獲取與更新等由一個后臺核心線程進(jìn)行維護(hù)。個人資料管理線程功能流程圖如圖5-12所示。</p><p>  在個人收藏功能方面,景點信息在首頁模塊中下載,以JSON格式的TXT文件方式儲存在手機(jī)SD卡中以項目名命名目錄下,文件夾則以景點的ID命名。在查看時,該模塊會根據(jù)景點ID搜索到指定目錄的TXT文件,并加以解析,然后以LisView方式將其可視化。此時,用戶則可以根據(jù)需要,按照指定手勢對信息進(jìn)行查詢、刪除。

105、例如,在ListView的Item中滑動手勢,將每個Item的刪除按鈕可視化,按下即可實現(xiàn)對信息的刪除。</p><p>  個人收藏功能流程圖如圖5-13所示。</p><p>  圖5-12 個人資料管理線程流程圖</p><p>  圖5-13 景點收藏功能流程圖</p><p><b>  6 系統(tǒng)測試</b>&

106、lt;/p><p>  至此,已經(jīng)完成了guidemap工程的代碼編寫工作,這一節(jié)將對代碼進(jìn)行軟件測試??紤]到Android虛擬機(jī)效率比較低,所以本系統(tǒng)的測試操作將使用真機(jī)測試,并用豌豆莢手機(jī)截圖功能將結(jié)果截圖,測試機(jī)型為魅族MX。在測試方式上我主要進(jìn)行了系統(tǒng)的黑盒測試,其過程與結(jié)果如下:</p><p>  (1) 在工程名guidemap上點右鍵,然后選擇“Run As”,然后選擇“And

107、roid Application”。首先進(jìn)入登錄界面,此時GPS、WIFI未開啟提示開啟。開啟GPS后,打開注冊頁面,注冊對輸入的信息進(jìn)行格式檢測(正則表達(dá)式檢測)。功能正常實現(xiàn);</p><p>  (2) 登錄成功,進(jìn)入系統(tǒng)主界面,“首頁”選項卡,依次進(jìn)行切換城市、景點查詢,下載。功能正常實現(xiàn);</p><p>  (3) 點擊“導(dǎo)航”選項卡,首先進(jìn)行手寫對始止點輸入然后選定路線模式,

108、開始搜索,結(jié)果如如期;進(jìn)行手勢輸入,選定路線模式,結(jié)果如如期;</p><p>  (4) 點擊“周邊”選項卡,輸入搜索關(guān)鍵字,如酒店,然后手勢輸入中心點與半徑,搜索結(jié)果如如期;</p><p>  (5) 點擊“我的”選項卡,頁面周期性刷新位置,點擊賬號的Button,瀏覽或修改賬號信息。點擊我的收藏,進(jìn)入收藏景點頁面,進(jìn)行查看詳細(xì)信息、刪除信息操作。功能正常實現(xiàn)。</p>

109、<p><b>  7 總結(jié)</b></p><p>  到目前為止,這個基于Android的智能導(dǎo)游系統(tǒng)算是順利完成了,它基本可以提供智能導(dǎo)游的任務(wù):景點智能導(dǎo)游、周邊查詢、用戶管理等等。但是,由于本人技術(shù)的限制,很顯然地,它還略顯稚嫩,健壯性較為不足。在這個工程的構(gòu)思方面比較欠缺,UI也難稱簡潔靈活大方,這些問題還需要以后的一步步完善。與此同時,這個軟件還可以進(jìn)一步擴(kuò)展,例如

110、:可以模仿微博,添加用戶分享模塊;還可以在服務(wù)端添加后臺管理系統(tǒng),用于實現(xiàn)對景點注冊與審核、用戶信息管理與審核等功能,這既可以優(yōu)化用戶體驗又可以進(jìn)一步規(guī)范化旅游業(yè)的管理。</p><p>  本次畢業(yè)設(shè)計一共經(jīng)歷了數(shù)個月的時間,目睹著這個軟件的一步步成長,我的心情真的難以言表。毫無疑問,畢業(yè)設(shè)計是本科學(xué)習(xí)階段一次非常難得的理論與實際相結(jié)合的機(jī)會。通過這次畢設(shè),我進(jìn)一步熟悉了諸如線程池、緩存技術(shù)、反射、正則表達(dá)式等

111、各種Adroid應(yīng)用與Web應(yīng)用的開發(fā)技巧,和數(shù)據(jù)庫的操作。然而我覺得更為重要的是,透過這個過程,我提高了自己解決工程難題的能力,同時也提高我查閱文獻(xiàn)資料、設(shè)計手冊、設(shè)計規(guī)范以及電腦制圖等其他專業(yè)能力水平,而且通過對整體的掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 全國假

112、日辦 2013年中國春節(jié)黃金周旅游統(tǒng)計報告. [EB/OL]. http://www.cnta.gov.cn/html/20 13-2/ 2013-2-16-16-28-22564.html,2013-2-16</p><p>  [2] 百度百科. Android開發(fā). [EB/OL]. http://baike.baidu.com/view/4030968.html, 2010-12-12</p>

113、<p>  [3] SAX項目官方網(wǎng) [EB/OL] .http://sax.sourceforge.net/.</p><p>  [4] 汪永松. Android平臺開發(fā)之旅. [M].北京:機(jī)械工業(yè)出版社,2010.4:105-108</p><p>  [5] 文龍強(qiáng) 博客 [EB/OL] http://www.cnblogs.com/wen999010565/arc

114、hive/2008/03/05/1091430.html 2008-3-5</p><p>  [6] 范立峰 林果園. Java Web程序設(shè)計教程 [M].北京:人民郵電出版社,2011.7:80-87</p><p>  [7] 百度百科. 百度地圖API. [EB/OL]. http://baike.baidu.com/view/3521171.html, 2012-11-22&l

115、t;/p><p>  [8] 李剛. 瘋狂Android講義 [M].北京:電子工業(yè)出版社,2011.7:501-505</p><p><b>  致 謝</b></p><p>  本研究及學(xué)位論文是在我的指導(dǎo)老師XXX的悉心指導(dǎo)下完成。在整個設(shè)計和論文撰寫過程中,由于實習(xí),我難以兼顧畢業(yè)設(shè)計,但老師不僅提供了我大量相關(guān)資料,還給予我許多嚴(yán)謹(jǐn)

116、而又親切的實際指導(dǎo),讓我可以及時地完成了畢業(yè)設(shè)計的任務(wù)。與此同時,XXX老師在畢業(yè)設(shè)計前期無私地為我提供舒適工作環(huán)境。在此,我對XXX老師的指導(dǎo)以及XXX老師的幫助表示衷心的感謝!</p><p>  感謝的的家人,他們雖然并不能在技術(shù)上給予我指導(dǎo),但是卻在此過程中不斷地支持我、鼓勵我,每當(dāng)我累時,他們就是我最堅實的后盾。</p><p>  除此之外,在畢業(yè)設(shè)計的過程中我也得到了諸位同學(xué)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論