基于Android的地圖定位與搜索應(yīng)用程序的設(shè)計(jì)說(shuō)明_第1頁(yè)
基于Android的地圖定位與搜索應(yīng)用程序的設(shè)計(jì)說(shuō)明_第2頁(yè)
基于Android的地圖定位與搜索應(yīng)用程序的設(shè)計(jì)說(shuō)明_第3頁(yè)
基于Android的地圖定位與搜索應(yīng)用程序的設(shè)計(jì)說(shuō)明_第4頁(yè)
基于Android的地圖定位與搜索應(yīng)用程序的設(shè)計(jì)說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于Android平臺(tái)的主題圖定位和搜索應(yīng)用程序設(shè)計(jì)摘要隨著Android[[]方哲然、韓偉麗、李英九.基于權(quán)限的Android安全:?jiǎn)栴}與對(duì)策[J].電腦與安全,2014,:.][]方哲然、韓偉麗、李英九.基于權(quán)限的Android安全:?jiǎn)栴}與對(duì)策[J].電腦與安全,2014,:.基于Android平臺(tái)的地圖定位和搜索現(xiàn)在應(yīng)該成為最常見(jiàn)的移動(dòng)互聯(lián)網(wǎng)應(yīng)用。定位搜索功能是指通過(guò)獲取特定的經(jīng)緯度坐標(biāo),在地圖上顯示地理坐標(biāo)的相關(guān)信息。最大的優(yōu)點(diǎn)是它具有豐富的硬件選擇性和良好的數(shù)據(jù)開(kāi)發(fā)能力。經(jīng)過(guò)一周對(duì)手機(jī)地圖其他app的觀察,經(jīng)過(guò)多次總結(jié)和修改,本次《基于Android平臺(tái)的地圖定位與搜索應(yīng)用設(shè)計(jì)》的設(shè)計(jì)內(nèi)容主要包括以下幾個(gè)方面:系統(tǒng)需求分析、Android應(yīng)用開(kāi)發(fā)及運(yùn)行環(huán)境、系統(tǒng)設(shè)計(jì)及處理流程、系統(tǒng)功能設(shè)計(jì)、Android系統(tǒng)應(yīng)用架構(gòu)、AndroidUI布局及人機(jī)界面、系統(tǒng)開(kāi)發(fā)所需組件及數(shù)據(jù)存儲(chǔ)技術(shù)、手機(jī)GPS衛(wèi)星定位模塊、地圖加載功能、目標(biāo)位置搜索和詳細(xì)顯示等關(guān)鍵詞:安卓;地點(diǎn);搜索;應(yīng)用目錄總結(jié)-1-摘要-2-1.前言-5-1.1。選題背景-5-1.2.題目的意義-5-1.3.Android的現(xiàn)狀與前景-6-1.4.研究?jī)?nèi)容-7-2.技術(shù)支持和百度地圖API-8-2.1。手機(jī)地圖服務(wù)-8-2.2.定位技術(shù)-8-2.3.系統(tǒng)相關(guān)類-9-2.4.百度地圖API-10-三、Android應(yīng)用開(kāi)發(fā)流程-13-3.1。Android應(yīng)用運(yùn)行流程-13-3.2.Android開(kāi)發(fā)環(huán)境配置-14-3.3.關(guān)鍵技術(shù)與原理-14-4.系統(tǒng)分析與設(shè)計(jì)-16-4.1。需求分析-16-4.2.系統(tǒng)架構(gòu)分析-16-4.3.確定UI布局-17-4.4.功能設(shè)計(jì)-18-4.5.數(shù)據(jù)庫(kù)設(shè)計(jì)-19-五、系統(tǒng)主要功能的實(shí)現(xiàn)-21-5.1。主界面的實(shí)現(xiàn)-21-5.2.地圖瀏覽功能的實(shí)現(xiàn)-22-5.3.地圖模式選擇功能的實(shí)現(xiàn)-24-5.4.定位功能的實(shí)現(xiàn)-25-5.5.搜索功能的實(shí)現(xiàn)-28-5.6.天氣預(yù)報(bào)模塊的實(shí)現(xiàn)-29-5.7.系統(tǒng)優(yōu)化與發(fā)布-30-六、總結(jié)與展望-31-6.1。工作總結(jié)-31-6.2.問(wèn)題與展望-31-參考文獻(xiàn)-33-至-35-前言背景就國(guó)外而言,Android操作系統(tǒng)在手機(jī)市場(chǎng)占有相當(dāng)大的比重。據(jù)統(tǒng)計(jì),2012年全球Android手機(jī)銷量約為4.8億部,在智能手機(jī)市場(chǎng)的份額達(dá)到68.8%的高位。到2013年,全球Android手機(jī)銷量飆升至7.812億部。智能手機(jī)市場(chǎng)的市場(chǎng)占有率也達(dá)到了78.9%的新高[[]匿名。三星——移動(dòng)互聯(lián)網(wǎng)時(shí)代的下一個(gè)霸主[J].中國(guó)經(jīng)濟(jì)周刊,2013,(15):68-69。]。由于Android[]匿名。三星——移動(dòng)互聯(lián)網(wǎng)時(shí)代的下一個(gè)霸主[J].中國(guó)經(jīng)濟(jì)周刊,2013,(15):68-69。隨著智能手機(jī)逐漸走進(jìn)普通人的生活,它將成為人們獲取外界信息的主要設(shè)備[[]舒憲華.基于Android平臺(tái)的移動(dòng)Web地圖服務(wù)設(shè)計(jì)[D].大連海事大學(xué),2009.DOI:10.7666/d.y1548258.]。因此,在Android[]舒憲華.基于Android平臺(tái)的移動(dòng)Web地圖服務(wù)設(shè)計(jì)[D].大連海事大學(xué),2009.DOI:10.7666/d.y1548258.主題的意義近代以來(lái),數(shù)字通信技術(shù)的飛速發(fā)展,特別是3G通信技術(shù)的逐漸成熟,使得智能手機(jī)的應(yīng)用越來(lái)越廣泛。幾乎十分之九的中國(guó)人擁有手機(jī)。2015年3月工信部最新發(fā)布的通信業(yè)經(jīng)濟(jì)運(yùn)行報(bào)告顯示,手機(jī)上網(wǎng)用戶數(shù)創(chuàng)歷史新高。目前,我國(guó)移動(dòng)用戶規(guī)模近13億,移動(dòng)互聯(lián)網(wǎng)用戶規(guī)模近9億。增長(zhǎng)5.7%。3月份,此時(shí)的4G用戶仍保持高速增長(zhǎng),凈增超過(guò)2300萬(wàn)。通信技術(shù)的發(fā)展不僅推動(dòng)了智能手機(jī)的快速發(fā)展,也導(dǎo)致了近年來(lái)移動(dòng)應(yīng)用軟件的快速發(fā)展,與移動(dòng)地圖服務(wù)相關(guān)的軟件層出不窮。近年來(lái),人們對(duì)LBS的關(guān)注度很高。LBS是一種基于位置的服務(wù)。主要以特定方式獲取用戶的GPS位置信息,在特定平臺(tái)的支持下為用戶提供增值服務(wù)。[]白鳳文,許華彥.國(guó)家地理網(wǎng)格在數(shù)字城市建設(shè)中的應(yīng)用[J].測(cè)繪公報(bào),2012[]白鳳文,許華彥.國(guó)家地理網(wǎng)格在數(shù)字城市建設(shè)中的應(yīng)用[J].測(cè)繪公報(bào),2012,(4):92-94。另一方面,Android移動(dòng)操作系統(tǒng)于2007年11月5日由谷歌及其開(kāi)放手機(jī)聯(lián)盟(OHA)正式對(duì)外展示,是世界上第一個(gè)專門(mén)為移動(dòng)終端開(kāi)發(fā)而打造的平臺(tái)。它具有免費(fèi)、完整和開(kāi)放的特點(diǎn)[[]劉婷.基于Android手機(jī)的地圖服務(wù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].郵電大學(xué),2013.],這是一個(gè)真正具有劃時(shí)代意義的移動(dòng)設(shè)備開(kāi)發(fā)平臺(tái)。正是因?yàn)樗拈_(kāi)源特性,Android剛推出就受到了眾多開(kāi)發(fā)者的高度關(guān)注。由于其免費(fèi)和開(kāi)源的特性,Android操作系統(tǒng)不僅限于手機(jī),還支持在許多筆記本電腦或其他智能設(shè)備上安裝和使用Android操作系統(tǒng)。因此,基于Android[]劉婷.基于Android手機(jī)的地圖服務(wù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].郵電大學(xué),2013.[]王立生,葉希哲.基于Android的防火墻的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)安全,2009,(10):36-38。DOI:10.3969/j.issn.1671-0428.2009.10.011。Android的現(xiàn)狀與前景在中國(guó),隨著Android的逐漸興起,國(guó)內(nèi)的Android愛(ài)好者也越來(lái)越多,很多系統(tǒng)開(kāi)發(fā)者都選擇投身于Android的開(kāi)發(fā)。據(jù)有關(guān)部門(mén)統(tǒng)計(jì),近幾個(gè)月來(lái),中國(guó)Android手機(jī)數(shù)量急劇上升,用戶對(duì)Android的態(tài)度也發(fā)生了翻天覆地的變化??偠灾珹ndroid在中國(guó)的發(fā)展前景是無(wú)限的,但還是有一些小瑕疵,其中之一就是很多開(kāi)發(fā)者只求自己的利益,而不是為了服務(wù)大眾。Android的發(fā)展最終將不利于Android在中國(guó)的健康發(fā)展。在國(guó)外,Android目前正處于蓬勃發(fā)展的階段。根據(jù)美國(guó)市場(chǎng)研究機(jī)構(gòu)的最新報(bào)告,僅2012年,基于Android的手機(jī)在美國(guó)的銷量就占到了總銷量的28%,而本應(yīng)擁有強(qiáng)大背景的iPhone僅占21%。充分說(shuō)明Android在國(guó)外的市場(chǎng)主導(dǎo)地位高于其他智能系統(tǒng)??梢韵胂?,隨著Android的不斷發(fā)展和推廣,這個(gè)比例會(huì)越來(lái)越大。因此,進(jìn)行Android系統(tǒng)開(kāi)發(fā)的開(kāi)發(fā)。用戶會(huì)越來(lái)越多,越來(lái)越多的人會(huì)選擇基于Android的手機(jī),其在國(guó)外的統(tǒng)治地位將不可動(dòng)搖。Android的英文原意是“機(jī)器人”。由于谷歌開(kāi)發(fā)了基于linux的開(kāi)源移動(dòng)操作系統(tǒng),現(xiàn)在,Android特指世界上第一個(gè)真正開(kāi)源、完整、免費(fèi)的移動(dòng)操作系統(tǒng)。目前已經(jīng)發(fā)布的版本從Android1.5到Android5.1,應(yīng)該不少于十個(gè)版本。現(xiàn)在最高版本是5.1,但目前的市場(chǎng)份額是Android2.3,因?yàn)檫@個(gè)版本仍然是最穩(wěn)定的版本。此外,Android3.0專用于平板電腦[[]嚴(yán)偉。基于Android平臺(tái)的移動(dòng)地圖服務(wù)系統(tǒng)設(shè)計(jì)[D].[]嚴(yán)偉。基于Android平臺(tái)的移動(dòng)地圖服務(wù)系統(tǒng)設(shè)計(jì)[D].浙江師范大學(xué),2012.DOI:10.7666/d.y2193811.目前,Android平臺(tái)在市場(chǎng)上仍有不少優(yōu)勢(shì),其中最突出的就是免費(fèi)和開(kāi)源,這一點(diǎn)絕對(duì)是無(wú)可爭(zhēng)辯的。它的免費(fèi)意味著谷歌向全世界免費(fèi)提供Android操作系統(tǒng),所有移動(dòng)供應(yīng)商都可以免費(fèi)使用Android操作系統(tǒng),這將為他們節(jié)省大部分制造成本,大大降低智能手機(jī)的開(kāi)發(fā)門(mén)檻。極大地推動(dòng)了Android系統(tǒng)在全球智能手機(jī)市場(chǎng)的普及。所謂開(kāi)源,是指Android系統(tǒng)的源代碼對(duì)外開(kāi)放,任何供應(yīng)商都可以修改再開(kāi)發(fā),設(shè)計(jì)出適合自己的獨(dú)特版本。提供了更廣闊的發(fā)展空間。從以上信息不難看出,Android的發(fā)展前景是無(wú)限的。作為手機(jī)開(kāi)發(fā)者,一定要抓住這個(gè)機(jī)會(huì),因?yàn)楦鶕?jù)iiMediaResearch(艾媒咨詢)的統(tǒng)計(jì),2008年到2013年,Android開(kāi)發(fā)者的數(shù)量在快速增長(zhǎng),這對(duì)手機(jī)開(kāi)發(fā)者來(lái)說(shuō)也是一個(gè)機(jī)會(huì),通過(guò)很多市場(chǎng)分析,或許大家都會(huì)明白,現(xiàn)在安卓的步伐還是很大的,能不能跟上它的步伐,就看你能不能把握住這個(gè)千載難逢的機(jī)會(huì)了。研究?jī)?nèi)容本文的研究?jī)?nèi)容主要包括:研究Android平臺(tái)的開(kāi)發(fā)過(guò)程,了解Android平臺(tái)的結(jié)構(gòu)框架,研究GPS定位的內(nèi)容,研究Android平臺(tái)應(yīng)用程序的開(kāi)發(fā)過(guò)程,結(jié)合百度地圖API實(shí)現(xiàn)基于Android平臺(tái)應(yīng)用的地圖定位和搜索服務(wù)。按照我的假設(shè),這個(gè)地圖應(yīng)用應(yīng)該包括以下幾個(gè)模塊:地圖模塊,可以進(jìn)行主流的地圖操作,如放大、縮小、拖動(dòng)等;定位模塊,可以通過(guò)GPS獲取用戶當(dāng)前的地理坐標(biāo),并在地圖上使用。標(biāo)記;搜索模塊:搜索模塊分為兩種情況,一種是定點(diǎn)搜索,用于搜索某個(gè)位置,另一種是環(huán)搜索,用于搜索具有一定周邊區(qū)域的建筑物;采集模塊,顧名思義,就是用來(lái)采集用戶關(guān)心的地理位置信息;天氣模塊,天氣模塊是這個(gè)設(shè)計(jì)的延伸,實(shí)現(xiàn)的目的是為了方便用戶了解當(dāng)?shù)氐奶鞖馇闆r,選擇合適的出行方式。技術(shù)支持和百度地圖API既然要做地圖相關(guān)的APP,首先要了解相關(guān)的技術(shù)支持。Android平臺(tái)手機(jī)地圖開(kāi)發(fā)的相關(guān)技術(shù)主要有手機(jī)地圖服務(wù)、GPS定位技術(shù)和本次使用的百度地圖API。移動(dòng)地圖服務(wù)手機(jī)地圖服務(wù)主要利用GPS技術(shù)準(zhǔn)確定位移動(dòng)用戶的地理位置,幫助用戶了解周邊位置,方便用戶通過(guò)客戶端在移動(dòng)互聯(lián)網(wǎng)與手機(jī)地圖服務(wù)器之間搜索和查詢路線位置。手機(jī)地圖服務(wù)不僅可以用相關(guān)詞語(yǔ)表達(dá)查詢信息,還可以通過(guò)地圖信息將信息直觀地表達(dá)給用戶。友好的人機(jī)交互界面提供了良好的用戶體驗(yàn)[[]崔杰.基于協(xié)議網(wǎng)關(guān)的企業(yè)級(jí)分布式即時(shí)通訊系統(tǒng)研究與實(shí)現(xiàn)[]崔杰.基于協(xié)議網(wǎng)關(guān)的企業(yè)級(jí)分布式即時(shí)通訊系統(tǒng)研究與實(shí)現(xiàn)[D].華南理工大學(xué),2010.查詢接口和服務(wù)器連接接口主要由手機(jī)地圖客戶端提供。手機(jī)地圖可以進(jìn)行放大、縮小、移動(dòng)等操作,不僅可以通過(guò)文字表達(dá)方式將查詢結(jié)果反饋給用戶,還可以通過(guò)地圖信息將查詢結(jié)果直觀地展示在地圖上??蛻舳艘蕴峤坏男问较蚍?wù)端致請(qǐng)求,服務(wù)端對(duì)收到的請(qǐng)求進(jìn)行相應(yīng)的處理,并將處理后得到的地圖數(shù)據(jù)以柵格數(shù)據(jù)[[]張艷芳.Android移動(dòng)Web[]張艷芳.Android移動(dòng)Web地圖服務(wù)應(yīng)用設(shè)計(jì)[D].XX大學(xué),2010。DOI:10.7666/d.y1657049??蛻舳讼蚍?wù)器致請(qǐng)求;服務(wù)器端將光柵數(shù)據(jù)傳輸?shù)娇蛻舳恕DSTYLEREF1\s2.1SEQ圖\*ARABIC\s1地圖查詢流程圖定位技術(shù)手機(jī)定位技術(shù)是一種可以獲取和識(shí)別手機(jī)或終端用戶在地圖上的位置信息的技術(shù)和服務(wù)。業(yè)務(wù)實(shí)現(xiàn)手機(jī)定位?;径ㄎ坏脑硎抢檬謾C(jī)與基站的距離來(lái)確定手機(jī)的位置?;径ㄎ环绞讲恍枰謾C(jī)具備GPS功能[[]IT網(wǎng)絡(luò)上的那些東西。2013.好搜百科。[[]IT網(wǎng)絡(luò)上的那些東西。2013.好搜百科。[在線]2013.[引用日期:2015年4月我們也可以根據(jù)提供服務(wù)的方式不同,將定位系統(tǒng)大致分為兩類:自有移動(dòng)定位系統(tǒng)和公共定位服務(wù)[[]stefanie1007.2014[]stefanie1007.2014。百度百科。[在線]2014.[引用日期:2015年4自有手機(jī)定位:自有手機(jī)定位系統(tǒng)不僅靈活、易于控制,是目前手機(jī)定位系統(tǒng)的首選。自有手機(jī)定位系統(tǒng)一般接入企業(yè)或政府網(wǎng)絡(luò),為其提供的定位服務(wù)大多與自有手機(jī)定位系統(tǒng)相關(guān)。業(yè)務(wù)相關(guān)。使用我們自己的手機(jī)定位系統(tǒng)的主要業(yè)務(wù)有:貨物和活動(dòng)定位、人員考勤和基于地理位置的分析和統(tǒng)計(jì)。公共位置服務(wù):公共位置服務(wù)歷來(lái)由移動(dòng)運(yùn)營(yíng)商提供。目前,市場(chǎng)上專門(mén)為某企業(yè)或政府部門(mén)服務(wù)的私有定位系統(tǒng)大多使用公共定位服務(wù)。目前,采用這種定位方式的商家或場(chǎng)所主要有:物流貨物、公安執(zhí)法、車(chē)輛或長(zhǎng)途車(chē)輛定位、應(yīng)急救援定位等。系統(tǒng)相關(guān)類地理位置服務(wù)包,可以實(shí)時(shí)獲取當(dāng)前設(shè)備的地理位置信息。不僅如此,它還提供網(wǎng)絡(luò)和基于GPS的定位服務(wù)[[]埃內(nèi)克,梅丹尼爾P.理解。安卓安全。IEEE計(jì)算機(jī)學(xué)會(huì),2009年。]。GPS_ROVIDER可以定位當(dāng)前設(shè)備的地理位置,一般用于設(shè)備自身定位等功能;NETWOR_PROVROER提供[]埃內(nèi)克,梅丹尼爾P.理解。安卓安全。IEEE計(jì)算機(jī)學(xué)會(huì),2009年。位置類地點(diǎn)定位管理類位置管理器位置提供者位置提供者_(dá)位置監(jiān)控類位置監(jiān)聽(tīng)器位置標(biāo)準(zhǔn)類標(biāo)準(zhǔn)表STYLEREF1\s2SEQ表\*ARABIC\s11定位相關(guān)類位置:提供地理位置信息、經(jīng)緯度、海拔高度、測(cè)量速度等。getLongitude()方法獲取經(jīng)度信息,getLatitude()方法獲取緯度信息,getAltyde()獲取海拔信息,getSpeed()方法對(duì)應(yīng)于獲取速度信息。LocationManager:這是定位系統(tǒng)的核心組件,可以實(shí)時(shí)獲取和更新地理位置信息。調(diào)用getLocationManager()方法返回最新的位置信息。調(diào)用requestLocationUpdates()方法注冊(cè)位置更新事件。調(diào)用requestLocationUpdates(String,long,float,LocatonListeiier)方法注冊(cè)一個(gè)接收位置和新事件的接收器。調(diào)用requestUpdates()方法刪除注冊(cè)信息并停止位置更新事件。LocationProvider:位置服務(wù)的抽象類。當(dāng)前設(shè)備的地理位置信息可以周期性上報(bào)[[]夏國(guó)平.基于Android的車(chē)載智能導(dǎo)航系統(tǒng)研究與設(shè)計(jì)[]夏國(guó)平.基于Android的車(chē)載智能導(dǎo)航系統(tǒng)研究與設(shè)計(jì)[D].電子科技大學(xué),2012.enableProvider()方法用于啟動(dòng)LocationProvider。disableProvider()方法用于關(guān)閉LocationProvider。LocationListener:用于實(shí)時(shí)監(jiān)聽(tīng)LocationManager通知的位置變化。調(diào)用onLocationChanged()方法實(shí)時(shí)更新位置。實(shí)現(xiàn)一個(gè)LocationListener接口來(lái)獲取GPS信息。當(dāng)GPS位置信息發(fā)生變化時(shí),會(huì)調(diào)用onLocationChanged()方法[[]崔旭凱.基于[]崔旭凱.基于Android手機(jī)的定位與信息檢測(cè)應(yīng)用開(kāi)發(fā)[D].郵電大學(xué),2013.當(dāng)GPS的狀態(tài)發(fā)生變化時(shí),會(huì)調(diào)用onStartChanged()方法。Criteria:該類可以根據(jù)查詢條件提供位置信息。例如地圖解析精度、功耗、海拔高度、速度等,系統(tǒng)可以根據(jù)過(guò)濾條件選擇合適的屬性定位器。該方法主要由LocationProvider實(shí)現(xiàn)。百度地圖API百度地圖API是百度集團(tuán)免費(fèi)提供的基于百度地圖服務(wù)的應(yīng)用接口。它不僅為開(kāi)發(fā)者提供地圖展示、搜索定位、云存儲(chǔ)檢索等多種強(qiáng)大功能,還集成了AndroidSDK、定位SDK等多種開(kāi)發(fā)工具和服務(wù)。百度地圖API的應(yīng)用范圍非常廣泛,不僅適用于PC端,也適用于移動(dòng)端、服務(wù)器端等設(shè)備。是各種操作系統(tǒng)下的地圖應(yīng)用開(kāi)發(fā)接口[[]楊剛.基于GPS的城市公交運(yùn)營(yíng)管理研究[]楊剛.基于GPS的城市公交運(yùn)營(yíng)管理研究[D].大連海事大學(xué),2013.圖STYLEREF1\s2SEQ圖\*ARABIC\s12百度地圖API系統(tǒng)架構(gòu)圖百度地圖AndroidSDK是一個(gè)應(yīng)用程序接口?;贏ndroid2.1及以上設(shè)備,我們可以通過(guò)這個(gè)接口實(shí)現(xiàn)豐富的LBS功能:地圖:提供地圖(2D、3D)顯示及縮放、平移、旋轉(zhuǎn)、改變視角等地圖操作;POI檢索:根據(jù)關(guān)鍵詞,可以檢索周邊、區(qū)域、城市三種類型的POI數(shù)據(jù);地理編碼:提供地理坐標(biāo)和地址之間的轉(zhuǎn)換能力;路線規(guī)劃:支持公交換乘查詢、公交信息查詢、路線規(guī)劃和路線檢索;疊加層:提供多種地圖疊加層(自定義標(biāo)簽、幾何圖形、文字繪制、地形圖圖層、熱圖圖層等),滿足開(kāi)發(fā)者的各種需求;定位:使用多種定位方式,任務(wù)步驟是使用定位SDK獲取當(dāng)前或特定位置的定位信息,然后使用地圖SDK顯示定位信息;離線地圖:支持使用離線地圖,不僅可以節(jié)省大量的用戶數(shù)據(jù)流量,還可以為用戶體驗(yàn)地圖提供更便捷的方式;導(dǎo)航:支持激活百度地圖導(dǎo)航和網(wǎng)頁(yè)導(dǎo)航,滿足用戶對(duì)導(dǎo)航功能的需求;LBS云端檢索:支持用戶檢索并展示自己存儲(chǔ)在LBS云端的POI數(shù)據(jù);特點(diǎn):提供短串分享、地點(diǎn)詳情檢索、熱力圖、百度地圖激活等功能,幫助開(kāi)發(fā)者構(gòu)建更強(qiáng)大的應(yīng)用;使用百度地圖API進(jìn)行開(kāi)發(fā),必須經(jīng)過(guò)兩個(gè)重要步驟:下載百度地圖開(kāi)發(fā)包在使用百度地圖API之前,首先需要在創(chuàng)建的項(xiàng)目中引用百度地圖API開(kāi)發(fā)包。只有將開(kāi)發(fā)包引用到我們的項(xiàng)目中,才能進(jìn)一步使用百度地圖API。開(kāi)發(fā)包應(yīng)該包含兩個(gè)文件:libBMapApiEngine.so和baidumapapi.jar[[]張志清.基于[]張志清.基于Android的移動(dòng)社交產(chǎn)品客戶端設(shè)計(jì)與實(shí)現(xiàn)[D].交通大學(xué),2012.首先在項(xiàng)目的libs文件夾中,將baidumapapi.jar復(fù)制到根目錄下,然后在根目錄下創(chuàng)建一個(gè)armeabi子目錄,將libBMapApiEngine.so丟到這個(gè)目錄下。最后,在項(xiàng)目屬性Libraries中選擇“AddExternalJARs”,然后選擇baidumapapi.jar,并確認(rèn)選擇,這樣就可以使用百度地圖API了。請(qǐng)求API密鑰在使用百度地圖SDK提供的各種LBS能力之前,我們需要到百度地圖開(kāi)發(fā)首頁(yè)獲取百度地圖API開(kāi)發(fā)密鑰,并將密鑰與我們的百度賬號(hào)關(guān)聯(lián)[[]戴士磊.基于Android的路邊停車(chē)位查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[]戴士磊.基于Android的路邊停車(chē)位查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].華南理工大學(xué),2013.在AndroidManifest中添加開(kāi)發(fā)密鑰、所需權(quán)限等信息:在應(yīng)用程序中添加開(kāi)發(fā)密鑰:添加所需的權(quán)限:安卓應(yīng)用開(kāi)發(fā)流程每個(gè)Android應(yīng)用程序的開(kāi)發(fā)都有一定的過(guò)程,既相同又有自己的特點(diǎn)。本節(jié)將簡(jiǎn)要介紹Android應(yīng)用程序的具體開(kāi)發(fā)過(guò)程。Android應(yīng)用運(yùn)行流程Android應(yīng)用程序在手機(jī)或虛擬機(jī)上運(yùn)行。Android程序需要先打包成.apk文件才能運(yùn)行。操作過(guò)程比較復(fù)雜,下面簡(jiǎn)單介紹一下。安裝程序時(shí),Android系統(tǒng)會(huì)為該程序分配一個(gè)私有存儲(chǔ)空間,即“安全沙箱”,用于存儲(chǔ)配置清單文件和二進(jìn)制資源文件等,如圖3-1所示。圖3-1Android應(yīng)用運(yùn)行分析圖同時(shí),系統(tǒng)會(huì)為每個(gè)安裝的應(yīng)用程序分配一個(gè)唯一的ID,用于區(qū)分不同應(yīng)用程序的文件和資源。系統(tǒng)還可以通過(guò)設(shè)置權(quán)限來(lái)限制每個(gè)應(yīng)用程序只能訪問(wèn)自己的資源和文件。.設(shè)置權(quán)限可以保證應(yīng)用程序之間的安全性和獨(dú)立性。但是,有時(shí)一個(gè)應(yīng)用程序可能需要訪問(wèn)其他應(yīng)用程序的數(shù)據(jù)和系統(tǒng)資源。Android平臺(tái)提供兩種解決方案:一種方法是讓多個(gè)應(yīng)用程序使用一個(gè)ID,這樣它們就可以相互訪問(wèn)其他應(yīng)用程序的文件;當(dāng)然,多個(gè)應(yīng)用程序可以同時(shí)使用一個(gè)虛擬機(jī)并在一個(gè)進(jìn)程中運(yùn)行。另一種方法是讓用戶在安裝應(yīng)用程序時(shí)設(shè)置權(quán)限,然后每個(gè)應(yīng)用程序都可以根據(jù)用戶設(shè)置的權(quán)限訪問(wèn)其他程序的數(shù)據(jù)和系統(tǒng)資源。經(jīng)過(guò)多次測(cè)試和相關(guān)資料驗(yàn)證,Android應(yīng)用程序的運(yùn)行會(huì)經(jīng)歷如下工作流程,如圖3-2所示。通過(guò)這個(gè)示意圖,我們可以清楚的了解Android應(yīng)用運(yùn)行的過(guò)程。圖3-2Android應(yīng)用編譯流程安卓開(kāi)發(fā)環(huán)境配置Android開(kāi)發(fā)環(huán)境的建立是Android應(yīng)用開(kāi)發(fā)不可缺少的過(guò)程。環(huán)境的建立需要準(zhǔn)備JavaJDK、Eclipse(或MyEclipse)、AndroidSDK和ADT。下載并安裝JDK。JDK安裝完成后,需要配置環(huán)境變量,JAVA_HOME、PATH、CLASSPATH。配置好環(huán)境變量后,運(yùn)行命令提示符:java–version,javac如果返回信息,則設(shè)置成功[[]Android[]Android開(kāi)發(fā)環(huán)境的安裝[0L]:://cnblogs/leipei2352/archive/2011/08/01/2124333.html接下來(lái)安裝Eclipse。用于Java和Android開(kāi)發(fā)的EclipseIDE。安裝Eclipse后,還需要安裝AndroidSDK。SDK的中文翻譯是軟件開(kāi)發(fā)工具包。顧名思義,這是軟件開(kāi)發(fā)人員可以使用的特定開(kāi)發(fā)工具的集合。在谷歌官網(wǎng)上,我們可以根據(jù)不同的需求下載相應(yīng)的SDK。最后安裝和配置ADT。經(jīng)過(guò)以上步驟,我們就可以創(chuàng)建我們的項(xiàng)目了。關(guān)鍵技術(shù)與原理Android應(yīng)用開(kāi)發(fā)不僅具有傳統(tǒng)軟件開(kāi)發(fā)的特點(diǎn),也有自己獨(dú)特的地方,因?yàn)橹饕\(yùn)行在手機(jī)上,所以需要考慮手機(jī)的運(yùn)行速度,所以要盡量做到充分設(shè)計(jì)程序時(shí)使用手機(jī)硬件。資源,優(yōu)化存儲(chǔ)占用率,降低應(yīng)用的功耗,還要考慮實(shí)際手機(jī)屏幕的大小,要適應(yīng)常見(jiàn)屏幕的各種屏幕分辨率。要制作一個(gè)完美的Android應(yīng)用程序必須掌握Android開(kāi)發(fā)過(guò)程中的幾項(xiàng)關(guān)鍵技術(shù)。1) 開(kāi)發(fā)語(yǔ)言。目前的Android應(yīng)用開(kāi)發(fā)語(yǔ)言大多是基于Java語(yǔ)言的,所以Android開(kāi)發(fā)需要熟練使用Java語(yǔ)言。當(dāng)然Android不再局限于Java語(yǔ)言,很多應(yīng)用都是用c/c++開(kāi)發(fā)的,但是這種語(yǔ)言的開(kāi)發(fā)主要是為了底層硬件的高效運(yùn)行開(kāi)發(fā)。目前主流的Android應(yīng)用都是用Java語(yǔ)言開(kāi)發(fā)的,所以掌握J(rèn)ava語(yǔ)言是Android開(kāi)發(fā)的基礎(chǔ)。2)省電技術(shù)。手機(jī)不處于待機(jī)狀態(tài)時(shí)會(huì)消耗大量電量,因此Android開(kāi)發(fā)必須考慮如何節(jié)省電池電量和提高電池壽命。研究表明,手機(jī)的耗電量與屏幕亮度、進(jìn)程數(shù)量等多種因素有關(guān),因此要降低電池耗電量,必須為程序選擇合適的背景,盡量減少不必要的進(jìn)程,并關(guān)閉已經(jīng)完成處理任務(wù)的進(jìn)程。另外,手機(jī)內(nèi)置的震動(dòng)、藍(lán)牙等大部分功能都非常耗電,所以在不需要的時(shí)候盡量不要開(kāi)啟這些硬件模塊。3)多線程技術(shù)。在Java語(yǔ)言中,多線程技術(shù)是一項(xiàng)重要的技術(shù)。對(duì)于需要用Java語(yǔ)言開(kāi)發(fā)的Android應(yīng)用,多線程技術(shù)也是必不可少的。在Android開(kāi)發(fā)中使用多線程技術(shù)可以充分利用手機(jī)硬件資源,從而有效提高程序的執(zhí)行效率。因此,多線程技術(shù)是Android開(kāi)發(fā)過(guò)程中必不可少的技術(shù)。在靜熱的情況下,Android應(yīng)用只有一個(gè)主線程,這意味著應(yīng)用要處理的任務(wù)太多,在主線程中占用的時(shí)間過(guò)長(zhǎng),最終會(huì)導(dǎo)致主線程阻塞,從而會(huì)導(dǎo)致應(yīng)用程序如果沒(méi)有響應(yīng),用戶體驗(yàn)會(huì)很差。為了解決這個(gè)問(wèn)題,需要將那些占用線程時(shí)間較長(zhǎng)的任務(wù)放到Android應(yīng)用中新開(kāi)啟的子線程中。子線程任務(wù)處理完后,只需要向主線程致消息進(jìn)行更新。例如,如果要下載的文件太大,等待下載的時(shí)間會(huì)很長(zhǎng),所以下載任務(wù)不能放在主線程上。向主線程致消息,通知主線程任務(wù)已完成。整個(gè)過(guò)程如圖3-3所示。圖3-3Android多線程示意圖系統(tǒng)分析與設(shè)計(jì)在開(kāi)發(fā)之前,我們需要對(duì)系統(tǒng)進(jìn)行必要的分析和設(shè)計(jì),然后根據(jù)分析和設(shè)計(jì)有計(jì)劃地設(shè)計(jì)程序,可以有效避免盲目和無(wú)目的的設(shè)計(jì)操作。,為了實(shí)現(xiàn)有計(jì)劃的設(shè)計(jì),我將系統(tǒng)的分析分為幾個(gè)模塊:需求分析、系統(tǒng)架構(gòu)分析、UI布局分析、功能分析,最后是數(shù)據(jù)庫(kù)的設(shè)計(jì)分析。接下來(lái),我將依次分析這些。這些模塊進(jìn)行詳細(xì)的分析和設(shè)計(jì)。需求分析這個(gè)設(shè)計(jì)的目的很明確,就是在Android平臺(tái)上設(shè)計(jì)一個(gè)集定位和搜索功能于一體的地圖服務(wù)應(yīng)用。通過(guò)對(duì)現(xiàn)有手機(jī)地圖軟件的結(jié)構(gòu)和功能的分析發(fā)現(xiàn),現(xiàn)有的手機(jī)地圖大部分都是以盈利為目的的,很多普通用戶使用起來(lái)非常不方便。雖然結(jié)構(gòu)很復(fù)雜,但也會(huì)使內(nèi)容復(fù)雜化。很多普通用戶會(huì)很難理解。在此基礎(chǔ)上,基于人性化的考慮和整個(gè)軟件的功能需求,準(zhǔn)確把握系統(tǒng)框架。系統(tǒng)架構(gòu)分析本系統(tǒng)采用層次結(jié)構(gòu)設(shè)計(jì),其整體結(jié)構(gòu)如圖4-1所示,主要包括:UI層:也就是用戶界面,就像我們身體表面可以看到的部分,比如四肢、皮膚等。主要用于用戶操作,將用戶操作數(shù)據(jù)致到底層,然后從底層獲取用戶需要的數(shù)據(jù),通過(guò)各種方式表達(dá)給用戶。UI層主要用于與用戶交互和傳遞信息。UI層的設(shè)計(jì)在一定程度上是地圖服務(wù)的基礎(chǔ)??刂茖樱嚎刂茖泳拖裎覀?nèi)梭w的關(guān)節(jié),神明的盡頭。它位于UI層和業(yè)務(wù)邏輯層之間。它使用各種接口來(lái)控制兩者之間的業(yè)務(wù)處理,并起到松耦合的作用,使代碼能夠更健壯,更高效地處理業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層:業(yè)務(wù)邏輯層就像我們?nèi)梭w的大腦。它的主要任務(wù)是執(zhí)行復(fù)雜的業(yè)務(wù)操作,例如事件處理、搜索和搜索。整個(gè)系統(tǒng)的協(xié)調(diào)操作是數(shù)據(jù)交互的媒介。數(shù)據(jù)訪問(wèn)層:這一層就像人的神經(jīng)或血管。主要用于訪問(wèn)用戶自己的數(shù)據(jù)或文件,并對(duì)其進(jìn)行增刪查改等操作。方便用戶認(rèn)證,也是客戶端請(qǐng)求數(shù)據(jù)的支持。圖4-1系統(tǒng)架構(gòu)圖確定UI布局布局問(wèn)題是設(shè)計(jì)和開(kāi)發(fā)Android應(yīng)用軟件的首要考慮因素。美觀簡(jiǎn)潔的應(yīng)用設(shè)計(jì),一方面可以有效提升用戶的用戶體驗(yàn),另一方面友好的交互界面可以有效提高程序執(zhí)行效率。生成Android系統(tǒng)的用戶界面主要有兩種方式。一是使用interface接口和xml文件進(jìn)行配置;另一種是通過(guò)代碼控制生成。Activity是Android開(kāi)發(fā)平臺(tái)的四大組件之一。Activity通過(guò)綁定UI布局來(lái)實(shí)現(xiàn)用戶交互界面。Activity實(shí)例不能直接顯示在手機(jī)屏幕上,但是很多事情都可以在Activity中完成。Android平臺(tái)上有五個(gè)主要的布局對(duì)象,它們是:線性布局(LinearLayout):LinearLayout的布局方式是將控制元素按垂直或水平順序排列,每個(gè)控制元素占據(jù)一行或一列。如果是垂直排列,那么每個(gè)控制元素不管它的寬度,都會(huì)占據(jù)一行,并且依次向下排列;如果是水平排列,那么每個(gè)控件不管多高都會(huì)占據(jù)一列,依次向右排列。絕對(duì)布局(AbsoluteLayout):AbsoluteLayout布局方式是利用坐標(biāo)指定每個(gè)控件元素相對(duì)于手機(jī)屏幕左上角(0,0)的絕對(duì)位置來(lái)實(shí)現(xiàn)布局。這種方法只適用于拖放控件的開(kāi)發(fā)。在實(shí)際開(kāi)發(fā)中,由于這種布局不適合適配各種屏幕分辨率,所以一般不會(huì)用到。RelativeLayout:RelativeLayout可以根據(jù)每個(gè)元素之間的相對(duì)位置關(guān)系來(lái)完成布局。在這個(gè)布局中,android:layout_below、android:layout_above等相對(duì)位置相關(guān)的屬性都是有效的。子元素通過(guò)設(shè)置自己的ID和相關(guān)的位置屬性來(lái)確定最終的布局。當(dāng)然,在指定相對(duì)位置關(guān)系時(shí),必須先定義相對(duì)子元素,否則會(huì)報(bào)異常。表格布局(TableLayout):在實(shí)際應(yīng)用中,TableLayout通常與TableRow配合使用,TableLayout在底部,TableRow在TableLayout里面,其他空間元素在TableRow里面。當(dāng)然,其他控件也可以單獨(dú)放在TableLayout中。FrameLayout:FrameLayout布局是Android平臺(tái)五種布局方式中最簡(jiǎn)單的布局。在布局中,所有子元素都添加在布局區(qū)域的左上角。后面添加的元素將覆蓋前一個(gè)元素。在應(yīng)用中,這種布局方式一般會(huì)與其他布局方式嵌套。在本次設(shè)計(jì)中,為了體現(xiàn)布局的美觀和簡(jiǎn)潔,布局主要包括:系統(tǒng)主界面、地圖界面布局、收藏列表布局、信息管理頁(yè)面布局、位置搜索、周邊查詢界面和天氣預(yù)報(bào)界面。(1)系統(tǒng)主界面:作為主界面,必須美觀大方。主界面應(yīng)該有程序設(shè)計(jì)的所有功能的界面,所以一個(gè)GridView可以用來(lái)展示所有的功能模塊,不僅組織有序,而且方便用戶使用。容易理解。(2)地圖界面:該界面包括一張真實(shí)地圖和多個(gè)菜單選項(xiàng)。菜單選項(xiàng)主要是系統(tǒng)需要實(shí)現(xiàn)的主要功能,用戶可以選擇進(jìn)入相應(yīng)的功能界面。(3)收藏列表界面:收藏列表主要使用一個(gè)ListView來(lái)顯示用戶收藏的地理位置。用戶可以點(diǎn)擊每個(gè)項(xiàng)目來(lái)定位對(duì)應(yīng)的位置,并在地圖上進(jìn)行標(biāo)記。(4)信息管理界面:主要存儲(chǔ)和顯示用戶信息。設(shè)計(jì)這個(gè)功能的目的是體現(xiàn)程序的人性化,讓用戶覺(jué)得地圖服務(wù)是自己的,在一定程度上提升用戶體驗(yàn)。在界面設(shè)計(jì)中,多個(gè)TextView主要用于展示用戶信息,用戶可以點(diǎn)擊修改自己的信息。(5)位置搜索界面:由于是用來(lái)實(shí)現(xiàn)搜索功能的,所以需要一個(gè)可以進(jìn)入的編輯框供用戶輸入搜索關(guān)鍵詞,還需要一個(gè)提交搜索的按鈕來(lái)提交搜索關(guān)鍵字到后臺(tái),搜索完成。然后標(biāo)記地圖,在菜單選項(xiàng)中提供保存記錄的功能。(6)周邊查詢界面:設(shè)置兩個(gè)編輯框供用戶輸入搜索中心點(diǎn)和目的地,如中心點(diǎn)“大學(xué)泉城學(xué)院”和目的地“KTV”,然后點(diǎn)擊“搜索”按鈕即可顯示相關(guān)的位置信息。通過(guò)ListView列出,用戶可以通過(guò)點(diǎn)擊在地圖上進(jìn)行標(biāo)記。(7)天氣預(yù)報(bào)界面:該界面用于顯示搜索位置的天氣情況。界面依次顯示當(dāng)天、明天、后天的天氣情況,主要使用TextView。特色設(shè)計(jì)本系統(tǒng)的主要目的是建立Android手機(jī)地圖定位和搜索服務(wù)。如圖4-2所示,本系統(tǒng)主要包括六個(gè)功能模塊,即:地圖瀏覽、定位、周邊查詢、位置搜索和天氣查詢。以下是各個(gè)功能的詳細(xì)說(shuō)明:1)、地圖瀏覽模塊:此時(shí)本次設(shè)計(jì)最重要的界面就是實(shí)現(xiàn)通過(guò)在地圖上查詢并展示獲取用戶所在城市的任務(wù)。用戶可以對(duì)地圖進(jìn)行拖動(dòng)、放大、縮小等操作。并且還提供衛(wèi)星、交通、街景三種地圖模式供用戶選擇。2)定位模塊:用戶可以快速定位自己當(dāng)前的位置,并在地圖上用一個(gè)點(diǎn)進(jìn)行標(biāo)記。3)收藏列表模塊:主要用于收集用戶搜索和訪問(wèn)過(guò)的位置。收藏后會(huì)顯示在收藏列表中。點(diǎn)擊對(duì)應(yīng)的位置信息,可以快速定位到位置。同時(shí),用戶可以簡(jiǎn)單地編輯收藏的位置。4)、周邊查詢模塊:用戶可以在設(shè)置中心點(diǎn)位置、搜索區(qū)域、搜索目的地后查詢周邊相關(guān)項(xiàng)目信息。5)、位置搜索模塊:用戶可以輸入要搜索的位置的相關(guān)信息,系統(tǒng)可以粗略查詢與其相關(guān)的位置的位置信息,顯示在列表中供用戶選擇,并進(jìn)行標(biāo)記確定位置后在地圖上,用戶可以收藏該地點(diǎn)以備日后再次查找。6)、天氣查詢模塊:主要用于查詢您所在城市的天氣情況。數(shù)據(jù)庫(kù)設(shè)計(jì)Android為用戶提供了四種訪問(wèn)數(shù)據(jù)的方式[[]帥東東?;诎沧渴謾C(jī)的電子地圖應(yīng)用開(kāi)發(fā)[D].南京郵電大學(xué),2013.]。一種是SharedPreferences方法,主要用于保存用戶在系統(tǒng)上的設(shè)置,數(shù)據(jù)會(huì)以xml文件的形式保存在手機(jī)內(nèi)存中。二是文件存儲(chǔ)方式。顧名思義,數(shù)據(jù)的存儲(chǔ)和傳輸是以文件的形式進(jìn)行的。第三種是網(wǎng)絡(luò)存儲(chǔ)方式,即Network方式,通過(guò)網(wǎng)絡(luò)數(shù)據(jù)包來(lái)存儲(chǔ)和傳輸數(shù)據(jù)。第四種是輕量級(jí)的嵌入式SQLite存儲(chǔ)方式。與前三種存儲(chǔ)方式相比,SQLite[]帥東東?;诎沧渴謾C(jī)的電子地圖應(yīng)用開(kāi)發(fā)[D].南京郵電大學(xué),2013.基于以上分析,本系統(tǒng)將使用SQLite和SharedPreferences進(jìn)行數(shù)據(jù)訪問(wèn)。在本系統(tǒng)中,主要使用地理位置數(shù)據(jù)信息,所以首先創(chuàng)建一個(gè)地理位置信息表,用于訪問(wèn)位置信息,如表4-1所示。場(chǎng)地類型評(píng)論ID整數(shù)自動(dòng)生成主鍵標(biāo)題細(xì)繩位置標(biāo)題日期_細(xì)繩記錄時(shí)間緯度整數(shù)緯度經(jīng)度整數(shù)經(jīng)度開(kāi)始細(xì)繩評(píng)論表STYLEREF1\s4SEQ表\*ARABIC\s11位置信息表在天氣系統(tǒng)中,還需要一個(gè)記錄天氣信息的表格。為了與ChinaWeather接口返回的數(shù)據(jù)對(duì)應(yīng),設(shè)計(jì)的天氣表如表4-3所示。場(chǎng)地類型評(píng)論ID整數(shù)自動(dòng)生成主鍵城市標(biāo)識(shí)細(xì)繩城市代碼城市細(xì)繩城市日期_y_細(xì)繩日期溫度1細(xì)繩一天的溫度范圍溫度2細(xì)繩第二天溫度范圍溫度3_細(xì)繩第三天溫度范圍天氣1細(xì)繩當(dāng)天的天氣天氣2細(xì)繩第二天的天氣伊瑟3_細(xì)繩第三天的天氣風(fēng)1細(xì)繩當(dāng)天的風(fēng)風(fēng)2_細(xì)繩第二天風(fēng)風(fēng)3細(xì)繩第三日風(fēng)表4-3天氣信息表系統(tǒng)主要功能的實(shí)現(xiàn)本章介紹了本設(shè)計(jì)系統(tǒng)中主要功能的實(shí)現(xiàn)。主界面的實(shí)現(xiàn)服務(wù)啟動(dòng)后,會(huì)打開(kāi)主界面,顯示用戶可以選擇的功能。如圖5-1所示,主界面使用一個(gè)GridView,將系統(tǒng)的所有功能直觀的展示給用戶,供用戶選擇。圖5-1系統(tǒng)主界面主要接口實(shí)現(xiàn)流程如下:首先在Activity中調(diào)用setContentView(R.layout.main)綁定主界面,然后調(diào)用GridViewgridview=(GridView)findViewById(R.id.gridview)得到GridView對(duì)象。在GridView中,我們需要對(duì)其進(jìn)行適配,然后我們需要加載一個(gè)Item,所以我們需要?jiǎng)?chuàng)建一個(gè)item.xml來(lái)顯示功能圖標(biāo)和功能名稱,所以我們需要在item.xml中添加兩個(gè)相對(duì)布局的TextView和ImageView方法的名稱和圖標(biāo)分別對(duì)應(yīng)。下一步是使資源適應(yīng)GridView。系統(tǒng)中所有的圖片資源都存放在res/drawable目錄下。首先,您需要將所有功能圖標(biāo)和功能名稱存儲(chǔ)在一個(gè)動(dòng)態(tài)數(shù)組中,例如,存儲(chǔ)一個(gè)“搜索”圖標(biāo)描述:HashMap<String,Object>map=newHashMap<String,Object>();map.put("ItemImage",R.drawable.icon_search);//添加圖片資源的IDmap.put("ItemText","搜索");//通過(guò)序列號(hào)制作ItemText列出圖片Item.add(map);存儲(chǔ)完每個(gè)圖標(biāo)后,會(huì)生成一個(gè)適配器saImageItems,用于存儲(chǔ)要顯示的圖片和文字,需要與上面剛剛生成的動(dòng)態(tài)數(shù)組一一對(duì)應(yīng)。然后調(diào)用gridview.setAdapter(saImageItems)添加并顯示。SimpleAdaptersaImageItems=newSimpleAdapter(this,ListImageItem,R.layout.item,newString[]{"ItemImage","ItemText"},新的int[]{R.id.ItemImage,R.id.ItemText});接下來(lái)需要給GirdView設(shè)置onItemClick方法來(lái)監(jiān)控Item是否被選中。方法中可以獲取相關(guān)功能的屬性和信息,通過(guò)Intener將信息傳遞給下一個(gè)活動(dòng)頁(yè)面,實(shí)現(xiàn)頁(yè)面的動(dòng)態(tài)效果,實(shí)現(xiàn)點(diǎn)擊某個(gè)功能可以跳轉(zhuǎn)到功能模塊。然后我們需要給應(yīng)用添加一個(gè)退出接口,我們可以把退出放在菜單中,代碼如下:公共布爾onCreateOptionsMenu(菜單菜單){menu.add(1,1,0,"exit").setIcon(R.drawable.exit); 返回super.onCreateOptionsMenu(menu);}它的實(shí)現(xiàn)方法很簡(jiǎn)單,我們只需要重寫(xiě)系統(tǒng)提供的抽象方法,代碼如下:publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){開(kāi)關(guān)(item.getItemId()){案例1://退出結(jié)束();//結(jié)束當(dāng)前Activity并退出系統(tǒng)休息;案例2://幫助意圖意圖=新Intent(GridViewActivity.this,Helpinfo.class);開(kāi)始活動(dòng)(意圖);//跳轉(zhuǎn)到幫助信息界面休息;}返回super.onMenuItemSelected(featureld,item);}當(dāng)然也可以直接在首頁(yè)添加退出按鈕。這種方法比較直觀方便,本次設(shè)計(jì)中采用了這種方法。地圖瀏覽功能的實(shí)現(xiàn)點(diǎn)擊地圖瀏覽功能按鈕后,頁(yè)面跳轉(zhuǎn)到如圖5-2所示的地圖界面,該界面的菜單選項(xiàng)包括“我的位置”、“通用地圖”、“衛(wèi)星地圖”、“實(shí)時(shí)地圖”交通》》四個(gè)菜單項(xiàng)。點(diǎn)擊“我的位置”可以快速定位到當(dāng)前位置,點(diǎn)擊地圖顯示方式可以相應(yīng)的方式顯示地圖。圖5-2地圖瀏覽界面map接口的實(shí)現(xiàn)過(guò)程如下:創(chuàng)建一個(gè)MapActivity并綁定一個(gè)視圖map_main.xml。將加載百度地圖的控件放在map_main.xml中:<.baidu.mapapi.map.MapViewandroid:id="+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"安卓:可點(diǎn)擊=“真”/>接口綁定后,里面的主要內(nèi)容一定要實(shí)現(xiàn)。為了方便后續(xù)維護(hù),可以寫(xiě)一個(gè)方法initView()。代碼如下:私人無(wú)效initView(){ mMapView=(MapView)findViewById(R.id.bmapView); mBaiduMap=mMapView.getMap(); //導(dǎo)入地圖并設(shè)置地圖打開(kāi)時(shí)的大小 MapStatusUpdatemsu=MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu); }地圖瀏覽界面的代碼比較簡(jiǎn)單,但是需要注意的是,這個(gè)頁(yè)面的時(shí)間需要開(kāi)發(fā)密鑰和權(quán)限的支持,前面已經(jīng)提過(guò),這里不再贅述。地圖模式選擇功能的實(shí)現(xiàn)在地圖瀏覽模式下,我們有時(shí)想查看當(dāng)前位置的路況、街景或衛(wèi)星云圖。這時(shí)候我們可以點(diǎn)擊“法線地圖”以外的菜單選項(xiàng),選擇“實(shí)時(shí)路況”、“街景模式”,查看“衛(wèi)星模式”選項(xiàng)。以衛(wèi)星模式為例,效果如圖5-3所示。圖5-3衛(wèi)星模式具體實(shí)施過(guò)程如下:實(shí)現(xiàn)方法很簡(jiǎn)單,因?yàn)槲覀兪窃诓藛芜x項(xiàng)中選擇,所以我們只需要設(shè)置onOptionsItemSelected()方法點(diǎn)擊菜單就可以監(jiān)控地圖模式的選擇。覆蓋 publicbooleanonOptionsItemSelected(MenuItemitem){ 開(kāi)關(guān)(item.getItemId()){ 案例R.id.id_map_common: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); 休息; 案例R.id.id_map_site: mBaiduMap.setMapType(百度地圖.MAP_TYPE_SATELLITE); 休息; 案例R.id.id_map_traffic: if(mBaiduMap.isTrafficEnabled()){ mBaiduMap.setTrafficEnabled(false); item.setTitle("實(shí)時(shí)交通(關(guān)閉)"); }else{ mBaiduMap.setTrafficEnabled(true); item.setTitle("實(shí)時(shí)交通(on)"); } break; R.id.id_map_locationbox: centerToMyLocation(); break; default: break; } returnsuper.onOptionsItemSelected(item); }功能的實(shí)現(xiàn)定位功能是本次設(shè)計(jì)的核心之一。主要功能是在地圖上快速定位當(dāng)前用戶的具體位置,方便用戶了解自己所在位置的基本情況。功能實(shí)現(xiàn)方法非常簡(jiǎn)單,只需要幾個(gè)小步驟。可以完成。關(guān)鍵是如何獲取用戶的GPS信息,獲取信息后根據(jù)信息在地圖上打上覆蓋物。也可以在我們前面提到的onLocationChanged()方法中更新位置信息,并在地圖上實(shí)時(shí)顯示位置變化。如圖5-4所示,是定位固定時(shí)的界面。圖5-4定位界面主要代碼實(shí)現(xiàn)流程如下:定位功能的實(shí)現(xiàn)主要是在地圖瀏覽界面,所以頁(yè)面的布局就不做解釋了。通過(guò)onLocationChanged()方法獲取位置信息。我們還封裝了一個(gè)方法。代碼如下:私人無(wú)效initLocation(){ mLLocationClient=newLocationClient(this); mLLocationListener=newMyLocationListener(); mLocationClient.registerLocationListener(mLocationListener); LocationClientOption選項(xiàng)=newLocationClientOption(); option.setCoorType("bd09ll"); option.setIsNeedAddress(true); option.setOpenGps(true); option.setScanSpan(1000); mLocationClient.setLocOption(option); //初始化圖標(biāo) mIconLocation=BitmapDescriptorFactory .fromResource(R.drawable.main_icon_nav); myOrientationListener=newMyOrientationListener(context); 我的方向監(jiān)聽(tīng)器 .setmOnOrientationListener(新OnOrientationListener(){ 覆蓋 公共無(wú)效onOrientationChanged(floatx){ mCurrentX=x; } }); }獲取經(jīng)緯度信息后,將信息反饋給用戶,并在地圖上疊加標(biāo)注當(dāng)前位置,并實(shí)時(shí)更新當(dāng)前位置。代碼如下:/** *定位我的位置 */ 私人無(wú)效中心ToMyLocation(){ LatLnglatLng=newLatLng(mLatitude,mLontitude); MapStatusUpdatemsu=MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); } 私有類MyLocationListener實(shí)現(xiàn)BDLocationListener{ 覆蓋 公共無(wú)效onReceiveLocation(BDLocation位置){ MyLocationDatadata=newMyLocationData.Builder()// .direction(mCurrentX)// .accuracy(location.getRadius())// .latitude(location.getLatitude())// .longitude(location.getLongitude())// 。建造(); mBaiduMap.setMyLocationData(數(shù)據(jù)); 我的位置配置配置=新的我的位置配置( LocationMode.NORMAL,true,mIconLocation); mBaiduMap.setMyLocationConfigeration(config); //更新經(jīng)緯度 mLatitude=location.getLatitude(); mLontitude=location.getLongitude(); 如果(isFirstIn){ //第一次,定位我的位置 LatLnglatLng=新LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdatemsu=MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); isFirstIn=假; } }搜索功能的實(shí)現(xiàn)地圖搜索模塊是該系統(tǒng)的另一個(gè)重要組成部分。接口部分看似簡(jiǎn)單,但后臺(tái)實(shí)現(xiàn)過(guò)程卻非常復(fù)雜。這個(gè)模塊會(huì)使用子線程,主要是因?yàn)樗阉魇且粋€(gè)耗時(shí)的操作。線程阻塞,所以必須啟動(dòng)子線程來(lái)實(shí)現(xiàn)這個(gè)過(guò)程。功能實(shí)現(xiàn)過(guò)程如下:搜索界面布局采用線性布局排列一個(gè)EditText文本輸入框和一個(gè)Button搜索按鈕,比較簡(jiǎn)單,不會(huì)顯示。值得一提的是搜索記錄的實(shí)現(xiàn),當(dāng)點(diǎn)擊輸入框時(shí),會(huì)顯示搜索記錄。關(guān)鍵是實(shí)現(xiàn)搜索框的監(jiān)聽(tīng)事件。代碼如下:searchTextView=(TextView)findViewByld(R.id.TextViewSearch);searchTextView.setOnClickListener(newOnClickListener(){publicvoidonClick(查看v)(onSearchRequested();}});}復(fù)雜的部分是搜索過(guò)程的實(shí)現(xiàn)。這部分主要在后臺(tái)執(zhí)行。因?yàn)槭呛臅r(shí)操作,所以在子線程中進(jìn)行。當(dāng)子線程完成任務(wù)后,將數(shù)據(jù)返回給主線程。實(shí)施過(guò)程如下:線程t=newThread(newRunnable()( 公共無(wú)效運(yùn)行() { 嘗試{ PoiSearchpoiSearch=newPoiSearch(PoiSearchDemo.this, 新PoiSearch.Query(query,PoiTypeDef.All,"0579")); 結(jié)果=poiSearch.searchP2I(); }捕捉(lOExceptione){ e.打印堆棧跟蹤(); } 如果(progDialog.isShowing()){ 如果(結(jié)果!=null){ handler.sendMessage(Message.obtain(handler, 常量.POISEARCH)); }別的{ handler.sendMessage(Message.obtain(handler, 常量。錯(cuò)誤)); t.start(); }私人處理程序處理程序=新處理程序(){公共無(wú)效句柄消息(消息消息){if(msg.what==常量.POISEARCH){嘗試{List<PoiTtem>poiltems=result.getPage(1); 如果(poiltems!=null||poiltems.size()>0){ mmapController.setZoom(13); mMapController.animateTo(poiltems.get(0).getPoint());接下來(lái)是

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論