![android跑步應(yīng)用開(kāi)發(fā)畢業(yè)設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/ef6350acd2592a4ffeff1141eef2ece5/ef6350acd2592a4ffeff1141eef2ece51.gif)
![android跑步應(yīng)用開(kāi)發(fā)畢業(yè)設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/ef6350acd2592a4ffeff1141eef2ece5/ef6350acd2592a4ffeff1141eef2ece52.gif)
![android跑步應(yīng)用開(kāi)發(fā)畢業(yè)設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/ef6350acd2592a4ffeff1141eef2ece5/ef6350acd2592a4ffeff1141eef2ece53.gif)
![android跑步應(yīng)用開(kāi)發(fā)畢業(yè)設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/ef6350acd2592a4ffeff1141eef2ece5/ef6350acd2592a4ffeff1141eef2ece54.gif)
![android跑步應(yīng)用開(kāi)發(fā)畢業(yè)設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/ef6350acd2592a4ffeff1141eef2ece5/ef6350acd2592a4ffeff1141eef2ece55.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-3"\h\u326721緒論 1209991.1研究背景與意義 1139471.2國(guó)內(nèi)外研究現(xiàn)狀 1244051.3研究?jī)?nèi)容與目標(biāo) 2262592理論技術(shù)基礎(chǔ) 2322912.1理論基礎(chǔ) 2224092.1.1.系統(tǒng)內(nèi)核 2131302.1.2.后綴簡(jiǎn)介 2203802.1.3.硬件抽像層 3300992.1.4.中介軟件 4137852.1.5.安全權(quán)限機(jī)制 4137492.1.6.百度地圖定位 5119162.2技術(shù)基礎(chǔ) 5275063系統(tǒng)分析與設(shè)計(jì) 6195683.1需求分析 6308693.1.1.編寫目的 610783.1.2.術(shù)語(yǔ)定義
7309373.2總體設(shè)計(jì) 7156953.2.1.系統(tǒng)功能 735823.2.2.軟件結(jié)構(gòu) 8292303.2.3.程序流程圖 890403.3詳細(xì)設(shè)計(jì) 988113.3.1.總體界面設(shè)計(jì) 9153123.3.2.模塊功能設(shè)計(jì) 10289774系統(tǒng)實(shí)現(xiàn) 11151864.1主要界面 1144384.2代碼結(jié)構(gòu) 13226604.3開(kāi)發(fā)過(guò)程遇到的問(wèn)題 20133035總結(jié) 2110389參考文獻(xiàn) 2210246附錄 24摘要現(xiàn)在幾乎每個(gè)人都有移動(dòng)設(shè)備,而隨著科技的進(jìn)步,移動(dòng)設(shè)備已經(jīng)不僅僅是通訊工具,也成為了人們手中的玩物,甚至成為一些其他的工具,而各種各樣的移動(dòng)應(yīng)用出現(xiàn)在市場(chǎng)上,人們對(duì)移動(dòng)應(yīng)用的需求也漸漸增大。隨著人們對(duì)健康生活方式的追求,他們對(duì)一些健康類應(yīng)用的需求也越來(lái)越大。本論文從學(xué)習(xí)、研究和探討的角度,介紹了Android開(kāi)發(fā)的現(xiàn)狀以及Android開(kāi)發(fā)未來(lái)的發(fā)展趨勢(shì),然后以本系統(tǒng)為例從需求分析、應(yīng)用技術(shù)、設(shè)計(jì)架構(gòu)思想、系統(tǒng)詳細(xì)模塊實(shí)現(xiàn)上分別敘述了它的各種技術(shù)原理及實(shí)現(xiàn)方案,進(jìn)而簡(jiǎn)單的闡明了Android開(kāi)發(fā)以及百度地圖API使用的相關(guān)技術(shù)。然后以本系統(tǒng)為例從需求分析、應(yīng)用技術(shù)、設(shè)計(jì)架構(gòu)思想、數(shù)據(jù)庫(kù)設(shè)計(jì)、系統(tǒng)詳細(xì)模塊實(shí)現(xiàn)上分別敘述了它的各種技術(shù)原理及實(shí)現(xiàn)方案,進(jìn)而簡(jiǎn)單的闡明了開(kāi)發(fā)一個(gè)基于Android的健康類應(yīng)用開(kāi)發(fā)的相關(guān)技術(shù)。關(guān)鍵字:Android開(kāi)發(fā)、百度地圖API
ABSTRACTNowalmosteveryonehasamobiledevice,andwiththeprogressofscienceandtechnology,themobiledeviceisnotjustacommunicationtool,hasalsobecomeaplaythinginthehandsofthepeople,evenassomeoftheothertools,andavarietyofmobileapplicationsappearonthemarket,peopleonthemoveshouldusedemandalsograduallyincrease.Inthepursuitofahealthylifestyle,theirdemandforsomehealthclassapplicationisalsomoreandmorebig.Inthispaper,fromthestudy,researchandonthepointofview,thefuturedevelopmenttrendofAndroiddevelopmentandthedevelopmentofAndroid,andthentakethissystemastheexamplewithmodulefromrequirementanalysis,applicationtechnology,designthought,systemrealizationprincipleofvarioustechniquesaredescribedanditsimplementationscheme,andthensimplyexplainedAndroiddevelopmentandrelatedtechnologyBaidumapusingAPI.Andthentakethissystemastheexamplewithmodulefromrequirementanalysis,applicationtechnology,designarchitecture,databasedesign,systemrealizationprincipleofvarioustechniquesaredescribedanditsimplementationscheme,andthensimplyillustratesthedevelopmentofacorrelationbasedtechniquesandhealthdevelopmentofAndroidapplication.KeyWords:AndroidDevelope、BaiduMapAPI緒論研究背景與意義Android曾經(jīng)是一家創(chuàng)立于舊金山的公司的名字,該公司于2005年8月份被Google收購(gòu),并從此踏上了飛速發(fā)展的道路。經(jīng)過(guò)這幾年的發(fā)展,它已經(jīng)發(fā)展成了一個(gè)平臺(tái)、一個(gè)生態(tài)體系?,F(xiàn)在Android在移動(dòng)領(lǐng)域已經(jīng)得到了廣泛的應(yīng)用。根據(jù)Google于2011年6月份公布的數(shù)字,每天激活的Android設(shè)備高達(dá)50萬(wàn)臺(tái),今天,施密特再次更新了這一數(shù)據(jù)——現(xiàn)在,每天被激活的Android設(shè)備數(shù)量達(dá)到了150萬(wàn)份。谷歌安卓系統(tǒng)負(fù)責(zé)人桑德?tīng)枴づ炔瘢⊿undarPichai)2013年09月宣布,采用安卓移動(dòng)操作系統(tǒng)設(shè)備的激活量已經(jīng)超過(guò)10億臺(tái)。在全球銷售的智能手機(jī)中,有四分之三采用安卓操作系統(tǒng),并且有越來(lái)越多的平板電腦采用這個(gè)操作系統(tǒng)。相比于Symbian的日落西山,以及蘋果的封閉、WindowsPhone的前途未卜,Android無(wú)疑代表了當(dāng)前行業(yè)發(fā)展的主流趨勢(shì):開(kāi)放平臺(tái)取代了封閉平臺(tái)。讓參與者均能通過(guò)自己的努力而獲益。從2008年9月公布1.0版本以來(lái),經(jīng)過(guò)近幾年的跨越式發(fā)展,現(xiàn)在Android已經(jīng)發(fā)展到了4.4版本。2013年9月4日凌晨,谷歌對(duì)外公布了Android新版本Android4.4KitKat(奇巧巧克力),并且于2013年11月01日正式發(fā)布,新的4.4系統(tǒng)更加整合了自家服務(wù),力求防止安卓系統(tǒng)繼續(xù)碎片化、分散化。目前市場(chǎng)上占主流的并不是4.4版本,當(dāng)然,相信隨著時(shí)間的推移,4.4及后續(xù)版本會(huì)得到越來(lái)越多的設(shè)備的支持。國(guó)內(nèi)外研究現(xiàn)狀目前國(guó)內(nèi)的Android開(kāi)發(fā)還是主要以應(yīng)用開(kāi)發(fā)為主,主要分成3類:為企業(yè)開(kāi)發(fā)應(yīng)用、開(kāi)發(fā)通用應(yīng)用(放到AndroidMarket或者其他AppMarket銷售)以及游戲開(kāi)發(fā)(放到AndroidMarket或者其他AppMarket銷售)。第一類開(kāi)發(fā)者一般身處規(guī)模較大的公司,這些公司主要為自有品牌或者其他品牌設(shè)計(jì)手機(jī)或者平板電腦的總體方案。除了根據(jù)需求對(duì)系統(tǒng)進(jìn)行定制外,更多的工作在于為這些系統(tǒng)編寫定制的應(yīng)用。第二類開(kāi)發(fā)者,一般處于創(chuàng)業(yè)型公司或者是獨(dú)立開(kāi)發(fā)者,他們的盈利方式主要是2種:為國(guó)外公司進(jìn)行外包開(kāi)發(fā),或者通過(guò)Google的移動(dòng)廣告(AdMob)通過(guò)廣告點(diǎn)擊分成。而理論上的通過(guò)付費(fèi)下載的形式來(lái)盈利的,現(xiàn)在國(guó)內(nèi)鮮見(jiàn)成功者。第三類開(kāi)發(fā)者,目前和第二類開(kāi)發(fā)者類似。北京時(shí)間4月15日晚間消息,移動(dòng)應(yīng)用分析公司AppAnnie今日發(fā)布報(bào)告稱,今年第一季度,谷歌GooglePlay應(yīng)用商店在下載量方面依舊主導(dǎo)全球市場(chǎng)。報(bào)告稱,第一季度GooglePlay全球應(yīng)用下載量較AppStore高出45%,這主要得益于新興市場(chǎng)的推動(dòng),如俄羅斯、巴西、墨西哥和土耳其,其發(fā)展速度令無(wú)數(shù)人驚嘆,而Android產(chǎn)品占中國(guó)整體智能手機(jī)銷量的更是令其他系統(tǒng)無(wú)法企及,這些數(shù)字意味著龐大的市場(chǎng),自然能讓應(yīng)用開(kāi)發(fā)商欲罷不能,但Android碎片化的多版本問(wèn)題正愈演愈烈。兩相比較間,不少開(kāi)發(fā)商陷入了兩難的境地。在Android開(kāi)發(fā)者官方網(wǎng)站上,不少開(kāi)發(fā)者亦吐露出“抓狂”的情緒。由于本質(zhì)為開(kāi)源,Android系統(tǒng)發(fā)展至今,幾乎完全脫離了谷歌的控制,其花費(fèi)巨大開(kāi)發(fā)的新版本系統(tǒng)往往在手機(jī)廠商需要為新品添加噱頭的時(shí)候才會(huì)用上。研究?jī)?nèi)容與目標(biāo)根據(jù)如今安卓設(shè)備的普及,以及現(xiàn)如今人們?cè)桨l(fā)的重視身體的健康,開(kāi)始在閑暇的時(shí)間開(kāi)展一些體育活動(dòng),一些與健康相關(guān)的安卓應(yīng)用被人們需要,也更顯現(xiàn)出它們的實(shí)用性。而我開(kāi)發(fā)的則是一款基于安卓的跑步軟件。它可以實(shí)現(xiàn)利用GPS以及百度地圖API實(shí)現(xiàn)記錄用戶跑步路徑以及跑步距離的功能。理論技術(shù)基礎(chǔ)理論基礎(chǔ)系統(tǒng)內(nèi)核Android是運(yùn)行于Linuxkernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux里支持的功能,Android大都沒(méi)有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了達(dá)到商業(yè)應(yīng)用,必須移除被GNUGPL授權(quán)證所約束的部份,例如Android將驅(qū)動(dòng)程序移到Userspace,使得Linuxdriver與Linuxkernel徹底分開(kāi)。Bionic/Libc/Kernel/并非標(biāo)準(zhǔn)的Kernelheaderfiles。Android的Kernelheader是利用工具由LinuxKernelheader所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。Android的Linuxkernel控制包括安全(Security),存儲(chǔ)器管理(MemoryManagement),程序管理(ProcessManagement),網(wǎng)絡(luò)堆棧(NetworkStack),驅(qū)動(dòng)程序模型(DriverModel)等。下載Android源碼之前,先要安裝其構(gòu)建工具Repo來(lái)初始化源碼。Repo是Android用來(lái)輔助Git工作的一個(gè)工具。后綴簡(jiǎn)介APK是安卓應(yīng)用的后綴,是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似SymbianSis或Sisx的文件格式。通過(guò)將APK文件直接傳到Android模擬器或Android手機(jī)中執(zhí)行即可安裝。apk文件和sis一樣,把a(bǔ)ndroidsdk編譯的工程打包成一個(gè)安裝程序文件,格式為apk。APK文件其實(shí)是zip格式,但后綴名被修改為apk,通過(guò)UnZip解壓后,可以看到Dex文件,Dex是DalvikVMexecutes的全稱,即AndroidDalvik執(zhí)行程序,并非JavaME的字節(jié)碼而是Dalvik字節(jié)碼。APK文件結(jié)構(gòu)一個(gè)APK文件結(jié)構(gòu)為:1.META-INF\(注:Jar文件中??梢钥吹剑?.res\(注:存放資源文件的目錄);3.AndroidManifest.xml(注:程序全局配置文件);4.classes.dex(注:Dalvik字節(jié)碼);5.resources.arsc(注:編譯后的二進(jìn)制資源文件)??偨Y(jié)下我們發(fā)現(xiàn)Android在運(yùn)行一個(gè)程序時(shí)首先需要UnZip,然后類似Symbian那樣直接執(zhí)行安裝,和WindowsMobile中的PE文件有區(qū)別,這樣做對(duì)于程序的保密性和可靠性不是很高,通過(guò)dexdump命令可以反編譯,但這樣做符合發(fā)展規(guī)律,微軟的WindowsGadgets或者說(shuō)WPF也采用了這種構(gòu)架方式。在Android平臺(tái)中dalvikvm的執(zhí)行文件被打包為apk格式,最終運(yùn)行時(shí)加載器會(huì)解壓然后獲取編譯后androidmanifest.xml文件中的permission分支相關(guān)的安全訪問(wèn),但仍然存在很多安全限制,如果你將apk文件傳到/system/app文件夾下會(huì)發(fā)現(xiàn)執(zhí)行是不受限制的。最終我們平時(shí)安裝的文件可能不是這個(gè)文件夾,而在androidrom中系統(tǒng)的apk文件默認(rèn)會(huì)放入這個(gè)文件夾,它們擁有著root權(quán)限。硬件抽像層Android的HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅(qū)動(dòng)模塊。HAL的目的是為了把Androidframework與Linuxkernel隔開(kāi),讓Android不至過(guò)度依賴Linuxkernel,以達(dá)成Kernelindependent的概念,也讓Androidframework的開(kāi)發(fā)能在不考量驅(qū)動(dòng)程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展。HALstub是一種代理人(Proxy)的概念,Stub是以*.so檔的形式存在。Stub向HAL“提供”操作函數(shù)(Operations),并由Androidruntime向HAL取得Stub的Operations,再Callback這些操作函數(shù)。HAL里包含了許多的Stub(代理人)。Runtime只要說(shuō)明“類型”,即ModuleID,就可以取得操作函數(shù)。中介軟件操作系統(tǒng)與應(yīng)用程序的溝通橋梁,應(yīng)用分為兩層:函數(shù)層(Library)和虛擬機(jī)(VirtualMachine)。Bionic是Android改良libc的版本。Android同時(shí)包含了Webkit,所謂的Webkit就是AppleSafari瀏覽器背后的引擎。Surfaceflinger是就2D或3D的內(nèi)容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自制的BionicLibc。Android采用OpenCORE作為基礎(chǔ)多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。Android使用skia為核心圖形引擎,搭配OpenGL/ES。skia與LinuxCairo功能相當(dāng),但相較于LinuxCairo,skia功能還只是雛形的。2005年Skia公司被Google收購(gòu),2007年初,SkiaGL源碼被公開(kāi),Skia也是GoogleChrome的圖形引擎。Android的多媒體數(shù)據(jù)庫(kù)采用SQLite數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)又分為共用數(shù)據(jù)庫(kù)及私用數(shù)據(jù)庫(kù)。用戶可通過(guò)ContentResolver類(Column)取得共用數(shù)據(jù)庫(kù)。Android的中間層多以Java實(shí)現(xiàn),并且采用特殊的Dalvik虛擬機(jī)(DalvikVirtualMachine)。Dalvik虛擬機(jī)是一種“暫存器型態(tài)”(RegisterBased)的Java虛擬機(jī),變量皆存放于暫存器中,虛擬機(jī)的指令相對(duì)減少。Dalvik虛擬機(jī)可以有多個(gè)實(shí)例(Instance),每個(gè)Android應(yīng)用程序都用一個(gè)自屬的Dalvik虛擬機(jī)來(lái)運(yùn)行,讓系統(tǒng)在運(yùn)行程序時(shí)可達(dá)到優(yōu)化。Dalvik虛擬機(jī)并非運(yùn)行Java字節(jié)碼(Bytecode),而是運(yùn)行一種稱為.dex格式的文件。安全權(quán)限機(jī)制Android本身是一個(gè)權(quán)限分立的操作系統(tǒng)。在這類操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識(shí)別身份運(yùn)行(Linux用戶ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨(dú)立的識(shí)別方式。Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開(kāi)。系統(tǒng)更多的安全功能通過(guò)權(quán)限機(jī)制提供。權(quán)限可以限制某個(gè)特定進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對(duì)特定數(shù)據(jù)段的訪問(wèn)。Android安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒(méi)有權(quán)限對(duì)其他應(yīng)用、系統(tǒng)或用戶進(jìn)行較大影響的操作。這其中包括讀寫用戶隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫其他應(yīng)用文件,訪問(wèn)網(wǎng)絡(luò)或阻止設(shè)備待機(jī)等。安裝應(yīng)用時(shí),在檢查程序簽名提及的權(quán)限,且經(jīng)過(guò)用戶確認(rèn)后,軟件包安裝器會(huì)給予應(yīng)用權(quán)限。從用戶角度看,一款A(yù)ndroid應(yīng)用通常會(huì)要求如下的權(quán)限:撥打電話、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫入日程數(shù)據(jù)、讀取電話狀態(tài)或識(shí)別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。┑乩砦恢谩?chuàng)建藍(lán)牙連接、對(duì)互聯(lián)網(wǎng)的完全訪問(wèn)、查看網(wǎng)絡(luò)狀態(tài),查看WiFi狀態(tài)、避免手機(jī)待機(jī)、修改系統(tǒng)全局設(shè)置、讀取同步設(shè)定、開(kāi)機(jī)自啟動(dòng)、重啟其他應(yīng)用、終止運(yùn)行中的應(yīng)用、設(shè)定偏好應(yīng)用、震動(dòng)控制、拍攝圖片等。一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限。用戶也可以分析一款應(yīng)用所需權(quán)限,從而簡(jiǎn)單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機(jī)版,也沒(méi)有任何附加的內(nèi)容需要下載,那么它要求訪問(wèn)網(wǎng)絡(luò)的權(quán)限就比較可疑。百度地圖定位2.1百度地圖定位原理圖2.1百度地圖定位原理圖百度地圖Android定位SDK是利用設(shè)備當(dāng)前的GPS信息(GPS定位),基站信息(基站定位)和Wi-Fi信息(Wi-Fi定位)完成定位的。開(kāi)發(fā)者在應(yīng)用中成功集成百度定位SDK以后,既可以方便的通過(guò)定位SDK的接口向百度定位服務(wù)請(qǐng)求位置信息。定位SDK會(huì)根據(jù)設(shè)備當(dāng)前的實(shí)際情況(如是否開(kāi)啟GPS,是否連接網(wǎng)絡(luò),是否掃描到Wi-Fi信息等)生成定位依據(jù),并根據(jù)開(kāi)發(fā)者設(shè)置的實(shí)際定位策略(包括三種:高精度模式,低功耗模式,僅用設(shè)備模式)進(jìn)行定位。技術(shù)基礎(chǔ)本次開(kāi)發(fā)主要用到AndroidSDK以及百度地圖的API,開(kāi)發(fā)工具采用Eclipse導(dǎo)入Android開(kāi)發(fā)包、百度地圖API以及百度定位技術(shù)的API,如圖2.2圖2.2導(dǎo)入Android開(kāi)發(fā)包圖2.2導(dǎo)入Android開(kāi)發(fā)包而在安卓應(yīng)用的開(kāi)發(fā)過(guò)程中,需要使用的安卓模擬器,而本次開(kāi)發(fā)前期所使用到的則是Android自帶模擬器。自帶的模擬器主要用于檢查控件的功能以及設(shè)計(jì)是否完善。由于本次開(kāi)發(fā)需要用到GPS以及移動(dòng)網(wǎng)絡(luò)的支持,開(kāi)發(fā)中主要功能的測(cè)試依賴于移動(dòng)安卓設(shè)備。選用的設(shè)備為三星i9500,即三星GalaxyS4。三星SamsungGalaxyS系列新一代的旗艦GalaxyS4它采用了像素密度為441ppi(480dpi)的5吋1080p(1,920x1,080)SuperAMOLEDHD屏幕和2GBRAM,處理器根據(jù)地區(qū)不同分為兩種版本,國(guó)際版為雙四核1.6GHz+1.2GHz的Exynos處理器,定制版本是四核1.9GHz的高通驍龍600處理器或驍龍800處理器,配備有1280萬(wàn)后置攝像頭和210萬(wàn)像素的前置攝像頭,支持藍(lán)牙4.0技術(shù)和NFC近場(chǎng)通訊等功能。上市時(shí)預(yù)載的系統(tǒng)是Android4.2.2。使用的設(shè)備定位以及對(duì)軟件支持方面能夠非常出色的滿足開(kāi)發(fā)要求,測(cè)試是開(kāi)發(fā)中不可忽視的重要環(huán)節(jié)。系統(tǒng)分析與設(shè)計(jì)需求分析編寫目的現(xiàn)在的人們?cè)絹?lái)越重視健康,因此出現(xiàn)了許多跑步愛(ài)好者。而他們需要一些工具來(lái)記錄自己跑過(guò)的路徑和跑步的距離,以此來(lái)判斷自己的運(yùn)動(dòng)程度是否達(dá)到自己滿意的程度。而現(xiàn)在多數(shù)人都擁有Android設(shè)備,并且考慮到Android的開(kāi)源性,Android的開(kāi)發(fā)相對(duì)比較實(shí)際。所以本次要開(kāi)發(fā)一個(gè)基于Android系統(tǒng)的跑步軟件。
術(shù)語(yǔ)定義
Activity:Activity是Android組件中最基本也是最為常見(jiàn)用的四大組件(Activity,Service服務(wù),ContentProvider內(nèi)容提供者,BroadcastReceiver廣播接收器)之一。Activity是一個(gè)應(yīng)用程序組件,提供一個(gè)屏幕,用戶可以用來(lái)交互為了完成某 項(xiàng)任務(wù)。Activity中所有操作都與用戶密切相關(guān),是一個(gè)負(fù)責(zé)與用戶交互的組件,可以通過(guò)setContentView(View)來(lái)顯示指定控件。在一個(gè)android應(yīng)用中,一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕,它上面可以顯示一些控件也可以監(jiān)聽(tīng)并處理用戶的事件做出響應(yīng)。Activity之間通過(guò)Intent進(jìn)行通信。Intent:Intent(意圖)主要是解決Android應(yīng)用的各項(xiàng)組件之間的通訊。Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此,Intent在這里起著一個(gè)媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。百度定位SDK:百度地圖Android定位SDK是為Android移動(dòng)端應(yīng)用提供的一套簡(jiǎn)單易用的LBS定位服務(wù)接口,專注于為廣大開(kāi)發(fā)者提供最好的綜合定位服務(wù),通過(guò)使用百度定位SDK,開(kāi)發(fā)者可以輕松為應(yīng)用程序?qū)崿F(xiàn)智能、精準(zhǔn)、高效的定位功能。百度地圖SDK:百度地圖AndroidSDK是一套基于Android2.1及以上版本設(shè)備的應(yīng)用程序接口。您可以使用該套SDK開(kāi)發(fā)適用于Android系統(tǒng)移動(dòng)設(shè)備的地圖應(yīng)用,通過(guò)調(diào)用地圖SDK接口,您可以輕松訪問(wèn)百度地圖服務(wù)和數(shù)據(jù),構(gòu)建功能豐富、交互性強(qiáng)的地圖類應(yīng)用程序。API:API(ApplicationProgrammingInterface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件的以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。總體設(shè)計(jì)系統(tǒng)功能針對(duì)本系統(tǒng)的設(shè)計(jì),主要實(shí)現(xiàn)兩個(gè)功能:用戶在使用時(shí),可以通過(guò)地圖隨時(shí)查看跑步的路徑用戶在使用時(shí),可以隨時(shí)查看自己已經(jīng)跑過(guò)的距離通過(guò)這兩個(gè)功能可以讓用戶做到對(duì)自己的運(yùn)動(dòng)狀況有所掌控,對(duì)自己的運(yùn)動(dòng)情況心中有數(shù)。軟件結(jié)構(gòu)本系統(tǒng)共有一個(gè)Activity,在這個(gè)Activity中要實(shí)現(xiàn)查看地圖,查看跑步距離。則要分出地圖定位模塊,距離計(jì)算以及路程記錄模塊。圖3.1軟件結(jié)構(gòu)Activity地圖初始化以及定位計(jì)算跑步距離以及繪制路線圖程序流程圖圖3.1軟件結(jié)構(gòu)Activity地圖初始化以及定位計(jì)算跑步距離以及繪制路線圖出現(xiàn)應(yīng)用界面選擇按鈕出現(xiàn)應(yīng)用界面選擇按鈕結(jié)束開(kāi)始記錄跑步數(shù)據(jù)是否查看地圖顯示地圖輸出跑步距離是否關(guān)閉地圖開(kāi)始退出是是是否退出跑步完成是圖3.2程序流程圖當(dāng)用戶進(jìn)入到界面后,選擇開(kāi)始按鈕,則開(kāi)始計(jì)時(shí)并且記錄跑步的數(shù)據(jù),在界面上輸出用戶跑步的距離;這時(shí)候用戶可以選擇查看地圖或者暫停;當(dāng)查看地圖用戶選擇查看地圖后,可以看到自己跑步的路線,可以對(duì)地圖進(jìn)行縮放;然后用戶可以關(guān)閉地圖,回到主界面,使地圖在后臺(tái)運(yùn)行;最后用戶可以選擇關(guān)閉應(yīng)用程序。詳細(xì)設(shè)計(jì)總體界面設(shè)計(jì)主界面時(shí)間時(shí)間距離開(kāi)始退出顯示已經(jīng)運(yùn)動(dòng)的時(shí)間實(shí)際是一個(gè)計(jì)時(shí)器顯示已經(jīng)運(yùn)動(dòng)的距離開(kāi)始按鈕觸摸后開(kāi)始計(jì)時(shí)并且啟動(dòng)定位等功能退出按鈕觸摸后退出應(yīng)用圖3.3主界面開(kāi)始跑步界面時(shí)間時(shí)間距離暫停退出顯示已經(jīng)運(yùn)動(dòng)的時(shí)間實(shí)際是一個(gè)計(jì)時(shí)器顯示已經(jīng)運(yùn)動(dòng)的距離暫停按鈕觸摸后暫停計(jì)時(shí)并且暫停定位等功能退出按鈕觸摸后退出應(yīng)用查看地圖觸摸后跳轉(zhuǎn)到地圖界面用以查看跑步路線圖3.4開(kāi)始跑步界面地圖界面顯示地圖并且顯示在地圖上已經(jīng)繪制好的路線圖顯示地圖并且顯示在地圖上已經(jīng)繪制好的路線圖控制地圖的縮放觸摸后關(guān)閉地圖回退到原來(lái)的跑步界面關(guān)閉地圖地圖縮放控件圖3.5地圖界面模塊功能設(shè)計(jì)系統(tǒng)分為兩個(gè)模塊:定位模塊與繪制地圖模塊雖然分為兩個(gè)模塊,但是兩個(gè)模塊之間并不是完全沒(méi)有關(guān)聯(lián),因?yàn)樵诙ㄎ坏耐瑫r(shí)要繪制用戶經(jīng)過(guò)的線路。而且記錄用戶跑步的距離并不能只記錄用戶的起點(diǎn)和終點(diǎn),因?yàn)榘俣鹊貓D計(jì)算的是兩點(diǎn)之間的直線距離,只是依據(jù)起點(diǎn)和終點(diǎn)來(lái)計(jì)算將會(huì)造成計(jì)算出的距離與用戶實(shí)際跑步的距離不相符合的情況。而這里用到了數(shù)學(xué)中“微量元素”的思想。記錄用戶短時(shí)間內(nèi)的起點(diǎn)與終點(diǎn)之間的距離,然后將這些短時(shí)間運(yùn)動(dòng)的距離相加最終可近似的得到用戶跑步的最終距離。這樣的方式所得到的距離誤差小到可以忽略不計(jì),而且繪制出來(lái)的跑步路徑也最接近用戶真實(shí)的跑步路線。定位模塊這個(gè)模塊中需要初始化地圖信息以及定位信息,設(shè)置定位相關(guān)的參數(shù),并且在用戶開(kāi)始跑步后立即啟動(dòng)定位功能。而這個(gè)定位相應(yīng)的用到了百度定位SDK以及百度地圖SDK。通過(guò)調(diào)用百度地圖的接口,可以實(shí)時(shí)獲得用戶當(dāng)前的位置,即用戶當(dāng)前位置的經(jīng)度緯度坐標(biāo)。在這個(gè)模塊中,將地圖以及定位信息初始化,同時(shí)設(shè)置按鈕的監(jiān)聽(tīng),一旦用戶開(kāi)始跑步,立即開(kāi)啟定位功能,在后臺(tái)每隔很短的一段時(shí)間獲取用戶的經(jīng)度緯度坐標(biāo)。繪制地圖模塊這個(gè)模塊中要繪制用戶跑步的路徑,將其在百度地圖上標(biāo)記出來(lái),并且同時(shí)統(tǒng)計(jì)用戶跑步的距離。計(jì)算距離的方式上文中已經(jīng)說(shuō)明,在此不再贅述。這并不是一個(gè)獨(dú)立的模塊,這個(gè)模塊需要在上一個(gè)模塊的基礎(chǔ)上來(lái)操作。而繪制的路線相當(dāng)于在百度地圖上新增加的圖層上進(jìn)行繪制。但是在用戶看來(lái)只是一個(gè)圖層。而繪制路線的方式也是用折線來(lái)近似表示曲線,在視覺(jué)上看來(lái)并沒(méi)有偏差。而繪制路線以及計(jì)算距離需要用到百度地圖API,對(duì)百度地圖提供的接口加以更改就可以達(dá)到本次開(kāi)發(fā)的目的。系統(tǒng)實(shí)現(xiàn)主要界面界面大約有三個(gè)主要的界面,分別為主界面,跑步開(kāi)始界面以及查看地圖界面。主界面圖4.1主界面當(dāng)用戶打開(kāi)應(yīng)用便進(jìn)入主界面,在這里用戶可以開(kāi)始跑步,也可以退出應(yīng)用。圖4.1主界面開(kāi)始跑步界面跑步開(kāi)始便顯示用戶跑步的距離,時(shí)間等信息,詳細(xì)解說(shuō)如下圖:這里顯示用戶這里顯示用戶已跑步時(shí)間這里顯示用戶已跑步距離暫停按鈕觸摸后暫停計(jì)時(shí)和定位查看地圖按鈕觸摸后跳到地圖界面圖4.2開(kāi)始跑步界面查看地圖查看地圖界面,在這里用戶可以方便的查看到自己跑步所經(jīng)過(guò)的路徑,詳細(xì)解說(shuō)見(jiàn)下圖:這里用紅線這里用紅線標(biāo)注出用戶所經(jīng)過(guò)的路程縮放控件控制地圖縮放級(jí)別也可以用兩個(gè)手指同時(shí)控制關(guān)閉地圖回到上一個(gè)界面圖4.3查看地圖界面代碼結(jié)構(gòu)本次開(kāi)發(fā)有一個(gè)Activity,除此之外還有一個(gè)用來(lái)繪制路線圖的類,具體如下:MapActivity類:繼承android.app.Activity,本Activity中需要初始化地圖還有定位信息,并且為地圖設(shè)置監(jiān)聽(tīng)函數(shù),每隔一秒鐘更新一次用戶的位置信息,并且更新用戶路線還有用戶跑步距離等信息。具體介紹如下:包含兩個(gè)內(nèi)部類:locationOverlay類:繼承com.baidu.mapapi.map.MyLocationOverlay,這個(gè)類是用來(lái)給地圖添加泡泡圖層,即用戶觸摸地圖上當(dāng)前位置點(diǎn)時(shí)會(huì)彈出一個(gè)圖層,告知用戶這個(gè)點(diǎn)為現(xiàn)在所處的位置。MyLocationListenner類:實(shí)現(xiàn)com.baidu.location.BDLocationListener接口,BDLocationListener接口有2個(gè)方法需要實(shí)現(xiàn):onReceiveLocation方法:接收異步返回的定位結(jié)果,參數(shù)是BDLocation類型參數(shù)。主要代碼://判斷是否是第一次定位,第一次則給前一次定位坐標(biāo)(preLocData)賦初始值,如果不是第一次定位則將上一次定位得到的數(shù)據(jù)賦值給preLocData用來(lái)記錄前一次的位置if(isFirstLoc==true){ preLocData.latitude=location.getLatitude(); preLocData.longitude=location.getLongitude();}else{ preLocData.latitude=locData.latitude; preLocData.longitude=locData.longitude;}//獲取當(dāng)前位置信息 locData.latitude=location.getLatitude();locData.longitude=location.getLongitude();//調(diào)用繪制路線函數(shù),在地圖上繪制路線圖DrawGraphic();onReceivePoi方法:接收異步返回的POI查詢結(jié)果,參數(shù)是BDLocation類型參數(shù)。主要函數(shù):onCreate方法:OnCreate()不產(chǎn)生窗口,只是在窗口顯示前設(shè)置窗口的屬性如風(fēng)格、位置等,Create()負(fù)責(zé)注冊(cè)并產(chǎn)生窗口,是整個(gè)Activity的入口。在這里我們初始化了地圖以及定位信息的參數(shù)。主要代碼:super.onCreate(savedInstanceState);//調(diào)用父類onCreate函數(shù)//初始化地圖管理類對(duì)象,獲取當(dāng)前的Application,初始化地圖mBMapMan=newBMapManager(getApplication());mBMapMan.init(null);setContentView(R.layout.activity_map);//設(shè)置Activity的布局文件//將這個(gè)activity添加到activity管理列表ManageActivity.getInstance().add("MapActivity",this);//初始化控件ch=(Chronometer)findViewById(R.id.map_chronometer1);//計(jì)時(shí)器start=(Button)findViewById(R.id.map_start);//開(kāi)始按鈕stop=(Button)findViewById(R.id.map_stop);//暫停按鈕showMap=(Button)findViewById(R.id.map_show);//查看地圖按鈕closeMap=(Button)findViewById(R.id.map_closemap);//關(guān)閉地圖按鈕ed=(EditText)findViewById(R.id.map_showdistance);//顯示距離文本distance=0;//初始化距離參數(shù)this.firstTime=true;//初始化標(biāo)記是否是第一次定位//設(shè)置按鈕Button的可見(jiàn)度stop.setVisibility(View.GONE);closeMap.setVisibility(View.GONE);showMap.setVisibility(View.GONE);//地圖對(duì)象賦值mMapView=(MapView)findViewById(R.id.bmapView);mMapController=mMapView.getController();mMapView.getController().setZoom(14);mMapView.getController().enableClick(true);mMapView.setBuiltInZoomControls(true);//設(shè)置啟用內(nèi)置的縮放控件MapControllermMapController=mMapView.getController();onClick方法:這個(gè)是控件的觸摸事件函數(shù),當(dāng)觸摸控件時(shí)便執(zhí)行這個(gè)函數(shù)。這個(gè)函數(shù)的主題其實(shí)是switch結(jié)構(gòu),用來(lái)判斷控件是否被觸摸,相應(yīng)的執(zhí)行操作。主要代碼:booleanisStart=true; switch(v.getId()){ caseR.id.map_show:{ mMapView.setVisibility(View.VISIBLE); start.setVisibility(View.GONE); stop.setVisibility(View.GONE); ch.setVisibility(View.GONE); showMap.setVisibility(View.GONE); ed.setVisibility(View.GONE); closeMap.setVisibility(View.VISIBLE); break; } caseR.id.map_start:{ if(isStart){ //定位初始化 mLocClient=newLocationClient(this); locData=newLocationData(); preLocData=newLocationData(); mLocClient.registerLocationListener(myListener); LocationClientOptionoption=newLocationClientOption(); option.setOpenGps(true);//打開(kāi)gps option.setCoorType("bd09ll");//設(shè)置坐標(biāo)類型 option.setScanSpan(1000); //設(shè)置定位時(shí)間間隔 mLocClient.setLocOption(option); mLocClient.start(); //創(chuàng)建彈出泡泡圖層 createPaopao(); //定位圖層初始化 myLocationOverlay=newlocationOverlay(mMapView); //設(shè)置定位數(shù)據(jù) myLocationOverlay.setData(locData); //添加定位圖層 mMapView.getOverlays().add(myLocationOverlay); myLocationOverlay.enableCompass(); //修改定位數(shù)據(jù)后刷新圖層生效 mMapView.refresh(); } //開(kāi)始計(jì)時(shí) if(this.firstTime){ ch.setBase(SystemClock.elapsedRealtime()); this.firstTime=false; showMap.setVisibility(View.VISIBLE); } else{//調(diào)整計(jì)時(shí)器暫停后的值 longtemp=(long) (Double.parseDouble(ch.getText().toString().split(":")[1])*1000); ch.setBase(SystemClock.elapsedRealtime()-temp); } ch.start();//計(jì)時(shí)器開(kāi)始 start.setVisibility(View.GONE); stop.setVisibility(View.VISIBLE); isStart=false; break; } caseR.id.map_stop:{ //暫停計(jì)時(shí) ch.stop(); longtemp=(long)(Double.parseDouble(ch.getText().toString().split(":")[1])*1000); ch.setBase(SystemClock.elapsedRealtime()-temp); stop.setVisibility(View.GONE); start.setVisibility(View.VISIBLE); mLocClient.stop();//暫停定位 isStart=true; break; } caseR.id.map_closemap:{ mMapView.setVisibility(View.INVISIBLE); closeMap.setVisibility(View.INVISIBLE); showMap.setVisibility(View.VISIBLE); ch.setVisibility(View.VISIBLE); ed.setVisibility(View.VISIBLE); if(!isStart){ start.setVisibility(View.VISIBLE); }else{ stop.setVisibility(View.VISIBLE); } }onDestroy方法:activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被調(diào)用。onPause方法:activity被暫停或收回cpu和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的,也是保護(hù)現(xiàn)場(chǎng),壓棧。onResume方法:activity開(kāi)始與用戶交互時(shí)調(diào)用(無(wú)論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法總是被調(diào)用的)。DrawGraphic方法:在這個(gè)函數(shù)中調(diào)用畫圖的類對(duì)象,并且在這里累加用戶的短時(shí)間移動(dòng)距離。主要代碼:this.dg=newDrawGraphics(this);//給字段DrawGraphics類對(duì)象dg申請(qǐng)空間 dg.addCustomElementsDemo();//調(diào)用DrawGraphic類中的畫圖方法 this.distance+=dg.getDistance();//更新距離(distance)MyLocationMapView類:繼承com.baidu.mapapi.map.MapView類,重寫onTouchEvent實(shí)現(xiàn)泡泡處理操作。DrawGraphics類:在這個(gè)類中對(duì)圖層進(jìn)行操作,可以在圖層上繪制圖形,這里主要是繪制直線,同時(shí)也記錄直線兩端之間的距離,函數(shù)具體介紹如下:DrawGraphics方法:構(gòu)造方法,在這里初始化一些需要的參數(shù)。addCustomElementsDemo方法:在這里調(diào)用繪制圖形的方法,并且將地圖刷新。主要代碼:GraphicsOverlaygraphicsOverlay=newGraphicsOverlay(mMapView);mMapView.getOverlays().add(graphicsOverlay); //添加折線graphicsOverlay.setData(drawLine());//執(zhí)行地圖刷新使生效mMapView.refresh();drawLine方法:確定兩個(gè)點(diǎn),在兩個(gè)點(diǎn)之間繪制直線。主要代碼://前一次的位置信息doublemLat=preLoc.latitude; doublemLon=preLoc.longitude; intlat=(int)(mLat*1E6); intlon=(int)(mLon*1E6); GeoPointpt1=newGeoPoint(lat,lon); //當(dāng)前位置信息 mLat=locData.latitude; mLon=locData.longitude; lat=(int)(mLat*1E6); lon=(int)(mLon*1E6); GeoPointpt2=newGeoPoint(lat,lon); //構(gòu)建線 GeometrylineGeometry=newGeometry(); //設(shè)定折線點(diǎn)坐標(biāo) GeoPoint[]linePoints=newGeoPoint[2]; linePoints[0]=pt1; linePoints[1]=pt2; lineGeometry.setPolyLine(linePoints); //設(shè)定樣式 SymbollineSymbol=newSymbol(); Symbol.ColorlineColor=lineSymbol.newColor(); lineColor.red=255; lineColor.green=0; lineColor.blue=0; lineColor.alpha=255; lineSymbol.setLineSymbol(lineColor,10); //生成Graphic對(duì)象 GraphiclineGraphic=newGraphic(lineGeometry,lineSymbol); countDistance(pt1,pt2); returnlineGraphic;countDistance方法:計(jì)算兩個(gè)點(diǎn)之間的直線距離。主要代碼:publicvoidcountDistance(GeoPointp1,GeoPointp2){ //起點(diǎn)坐標(biāo) GeoPointstart=p1; //終點(diǎn)坐標(biāo) GeoPointstop=p2; GeoPoint[]routeData=newGeoPoint[2]; routeData[0]=p1; routeData[1]=p2; //用站點(diǎn)數(shù)據(jù)構(gòu)建一個(gè)MKRoute MKRouteroute=newMKRoute(); route.customizeRoute(start,stop,routeData); distance=route.getDistance();}開(kāi)發(fā)過(guò)程遇到的問(wèn)題在開(kāi)發(fā)過(guò)程中,因?yàn)槭褂昧税俣鹊貓D的接口,所以在使用時(shí)需要做一些開(kāi)發(fā)的準(zhǔn)備工作,百度地圖的使用需要去百度地圖的官方網(wǎng)站去申請(qǐng)一個(gè)唯一的密鑰才可以在開(kāi)發(fā)中合法使用百度地圖。(申請(qǐng)密鑰的方法見(jiàn)附錄)在開(kāi)發(fā)過(guò)程中由于存在兩種獲取SHA1值的方式,而本次開(kāi)發(fā)遇到兩種方法得到的SHA1值不一致的情況。導(dǎo)致按照正確步驟申請(qǐng)的密鑰也不能夠正常使用的情況,最終發(fā)現(xiàn)系統(tǒng)本身的密鑰庫(kù)與Eclipse自帶的密鑰庫(kù)并不統(tǒng)一,最終將兩個(gè)密鑰庫(kù)統(tǒng)一起來(lái)再重新申請(qǐng)了密鑰之后便將問(wèn)題成功的解決了。Android提供的計(jì)時(shí)器暫停之后再開(kāi)始并不是在暫停的那個(gè)基礎(chǔ)上再開(kāi)始計(jì)時(shí)。這里需要明白Android計(jì)時(shí)器的工作原理,它是告訴計(jì)數(shù)器一個(gè)基礎(chǔ)的時(shí)間,然后讀取系統(tǒng)的時(shí)間再減去這個(gè)基礎(chǔ)時(shí)間,所以就算把計(jì)時(shí)器暫停,基礎(chǔ)時(shí)間并沒(méi)有改變,所以就會(huì)出現(xiàn)原來(lái)所說(shuō)的那種情況。為了解決這個(gè)問(wèn)題,需要在原來(lái)的基礎(chǔ)上減去中間的那段暫停時(shí)間,再開(kāi)始計(jì)時(shí)??偨Y(jié)優(yōu)點(diǎn):本系統(tǒng)使用起來(lái)比較容易,實(shí)現(xiàn)的功能能夠滿足用戶的基本需求。使用了百度地圖,能夠方便查看用戶跑步的線路圖。本系統(tǒng)能夠較為方便的查看用戶跑步的距離。本系統(tǒng)的設(shè)計(jì)簡(jiǎn)單明了,便于用戶使用。開(kāi)發(fā)的應(yīng)用比較簡(jiǎn)單,所以不足之處當(dāng)然是存在的。繼續(xù)研究方向:為本系統(tǒng)加入數(shù)據(jù)庫(kù)系統(tǒng),用于記錄用戶每次運(yùn)動(dòng)的情況,可以讓用戶回顧每次跑步的情況。對(duì)自己的運(yùn)動(dòng)狀態(tài)有一個(gè)大的掌控。本系統(tǒng)在運(yùn)行時(shí)用到GPS,所以在室內(nèi)不能夠滿足用戶的需求。假如用戶在室內(nèi)運(yùn)動(dòng),可以讓用戶自己調(diào)整應(yīng)用記錄的模式,在室內(nèi)不使用GPS定位,可以用傳感器來(lái)感知用戶的運(yùn)動(dòng)??梢栽谟脩暨\(yùn)動(dòng)的同時(shí),添加語(yǔ)音的提示??梢宰層脩魧?shí)時(shí)掌握自己運(yùn)動(dòng)的狀況。實(shí)時(shí)播報(bào)用戶的跑步速度,時(shí)間等等。
參考文獻(xiàn)百度地圖官方網(wǎng)站(/map/)百度百科(/)安卓官方網(wǎng)站(/)李剛.瘋狂Android講義[M].電子工業(yè)出版社,2011年6月Android
A
Programmer’s
Guide
.
Jerome(J.F.)DiMarzioDOI:10.1036、0071599886
林城.Android2.3應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)[J].機(jī)械工業(yè)出版社,2011韓超.Android經(jīng)典應(yīng)用程序開(kāi)發(fā)[J].人力資源出版社,2011(美)CayS.Horstmann,GaryCornell.Java核心技術(shù)[J].機(jī)械工業(yè)出版社,2008楊云君.Android的設(shè)計(jì)與實(shí)現(xiàn):卷I.機(jī)械工業(yè)出版社.2013年王曉敏,鄺孔武.清華大學(xué)出版社.2013
致謝本設(shè)計(jì)在王超老師的悉心指導(dǎo)和嚴(yán)格要求下業(yè)已完成,從課題選擇、方案論證到具體設(shè)計(jì)和調(diào)試,無(wú)不凝聚著王超老師的心血和汗水,在四年的本科學(xué)習(xí)和生活期間,也始終感受著導(dǎo)師的精心指導(dǎo)和無(wú)私的關(guān)懷,我受益匪淺。在此向王超老師表示深深的感謝和崇高的敬意。不積跬步何以至千里,本設(shè)計(jì)能夠順利的完成,也歸功于各位任課老師的認(rèn)真負(fù)責(zé),使我能夠很好的掌握和運(yùn)用專業(yè)知識(shí),并在設(shè)計(jì)中得以體現(xiàn)。正是有了他們的悉心幫助和支持,才使我的畢業(yè)論文工作順利完成,在此向河北農(nóng)業(yè)大學(xué)計(jì)算機(jī)系的全體老師表示由衷的謝意。感謝他們四年來(lái)的辛勤栽培。附錄介紹百度地圖API使用密鑰獲取步驟:登陸API控制臺(tái)圖附錄-1登陸API控制臺(tái)登錄會(huì)跳轉(zhuǎn)到API控制臺(tái)服務(wù),具體如下圖:圖附錄-1登陸API控制臺(tái)創(chuàng)建應(yīng)用圖附錄-2創(chuàng)建應(yīng)用點(diǎn)擊"創(chuàng)建應(yīng)用",系統(tǒng)將為您彈出創(chuàng)建AK頁(yè)面,輸入應(yīng)用名稱,將應(yīng)用類型改為:“formobile”:圖附錄-2創(chuàng)建應(yīng)用圖附錄-3創(chuàng)建應(yīng)用配置應(yīng)用圖附錄-3創(chuàng)建應(yīng)用圖附錄-4配置應(yīng)用在應(yīng)用類型選為“formobile”后,需要配置應(yīng)用的安全碼,如下圖所示:圖附錄-4配置應(yīng)用獲取安全碼輸入“安全碼”。安全碼的組成規(guī)則為:Android簽名證書的sha1值+“;”+packagename(即:數(shù)字簽名+分號(hào)+包名)注意:中間的分號(hào)為英文狀態(tài)下的分號(hào)!您可以通過(guò)兩種方法來(lái)獲取Android簽名證書的sha1值:(需事先配置好Android環(huán)境)獲取sha1值第一種方法:使用keytool第1步:運(yùn)行進(jìn)入控制臺(tái)圖附錄-6控制臺(tái)圖附錄-5運(yùn)行控制臺(tái)圖附錄-6控制臺(tái)圖附錄-5運(yùn)行控制臺(tái)第2步:定位到.android文件夾下,輸入cd.android圖附錄-7定位到.Android文件夾下第3步:輸入keytool-list-v-keystoredebug.keystore,會(huì)得到三種指紋證書,選取SHA1類型的證書(密鑰口令是android)圖附錄-7定位到.Android文件夾下圖附錄-8輸入口令其中keytool為jdk自帶工具;keystorefile為Android簽名證書文件圖附錄-8輸入口令圖附錄-9查看指紋證書第二種方法:在adt22中直接查看圖附錄-9查看指紋證書如果使用adt22,可以在eclipse中直接查看:winows->preferance->android->build。如下圖示:圖附錄-10在Eclipse中查看指紋證書其中“SHA1fingerprint”值即為Android簽名證書的sha1值圖附錄-10在Eclipse中查看指紋證書獲取包名包名是Android應(yīng)用程序本身在AndroidManifest.xml中定義的名稱,例如:圖附錄-11查看包名成功創(chuàng)建KEY圖附錄-11查看包名在輸入安全碼后,點(diǎn)擊“確定”完成應(yīng)用的配置工作,您將會(huì)得到一個(gè)創(chuàng)建的Key,請(qǐng)妥善保管您所申請(qǐng)的Key。到這您就可以使用新Key來(lái)完成您的開(kāi)發(fā)工作了。圖附錄-12成功創(chuàng)建KEY圖附錄-12成功創(chuàng)建KEY基于C8051F單片機(jī)直流電動(dòng)機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對(duì)良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級(jí)倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動(dòng)監(jiān)測(cè)系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營(yíng)養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動(dòng)控制系統(tǒng)研究與開(kāi)發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測(cè)試儀的研制基于單片機(jī)的自動(dòng)找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開(kāi)發(fā)基于單片機(jī)的液壓動(dòng)力系統(tǒng)狀態(tài)監(jiān)測(cè)儀開(kāi)發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺(tái)控制器的研制基于單片機(jī)的軟起動(dòng)器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開(kāi)發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測(cè)儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開(kāi)發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動(dòng)檢測(cè)儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測(cè)量?jī)x的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號(hào)檢測(cè)儀基于單片機(jī)的電機(jī)運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)Pico專用單片機(jī)核的可測(cè)性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能遙測(cè)微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實(shí)踐研究基于單片機(jī)的輪軌力檢測(cè)基于單片機(jī)的GPS定位儀的研究與實(shí)現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時(shí)控和計(jì)數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測(cè)量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動(dòng)低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 業(yè)務(wù)代辦合同范本
- 買賣賬號(hào)合同范本
- 事故車輛維修合同范本
- 發(fā)電機(jī)組在環(huán)保與污水處理廠的電力需求考核試卷
- 文具店多元化經(jīng)營(yíng)策略考核試卷
- 借據(jù)屬于借貸合同范本
- 文具行業(yè)的人才需求與職業(yè)規(guī)劃考核試卷
- 單位保險(xiǎn)合同范本
- 買房開(kāi)發(fā)商合同范例
- 土壤污染治理與修復(fù)工程技術(shù)模擬與實(shí)踐考核試卷
- 數(shù)學(xué)-河南省三門峽市2024-2025學(xué)年高二上學(xué)期1月期末調(diào)研考試試題和答案
- 2025年春新人教版數(shù)學(xué)七年級(jí)下冊(cè)教學(xué)課件
- 《心臟血管的解剖》課件
- 心肺復(fù)蘇課件2024
- 2024-2030年中國(guó)并購(gòu)基金行業(yè)發(fā)展前景預(yù)測(cè)及投資策略研究報(bào)告
- 河道清淤安全培訓(xùn)課件
- 2024各科普通高中課程標(biāo)準(zhǔn)
- 7.3.1印度(第1課時(shí))七年級(jí)地理下冊(cè)(人教版)
- 教師培訓(xùn)校園安全
- 北師大版語(yǔ)文四年級(jí)下冊(cè)全冊(cè)教案
- 清華大學(xué)考生自述
評(píng)論
0/150
提交評(píng)論