




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