畢業(yè)設(shè)計(jì):基于Android平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)_第1頁(yè)
畢業(yè)設(shè)計(jì):基于Android平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)_第2頁(yè)
畢業(yè)設(shè)計(jì):基于Android平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)_第3頁(yè)
畢業(yè)設(shè)計(jì):基于Android平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)_第4頁(yè)
畢業(yè)設(shè)計(jì):基于Android平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(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)介

畢業(yè)設(shè)計(jì)基于安卓平臺(tái)的音樂(lè)播放器基于安卓平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)摘要Android平臺(tái)是Google公司最新推出的一個(gè)平臺(tái),該平臺(tái)對(duì)移動(dòng)設(shè)備的程序集中包括一個(gè)操作系統(tǒng),一個(gè)中間件和一些關(guān)鍵性應(yīng)用。使用該平臺(tái)不需要任何費(fèi)用,代碼完全開(kāi)放。開(kāi)發(fā)人員可以在平臺(tái)系統(tǒng)上快速開(kāi)發(fā),并可以利用其它開(kāi)發(fā)人員的工作成果。所以,這為開(kāi)發(fā)創(chuàng)造了更大的靈活性,工作少,周期短,快速成型,并一步到位,同時(shí)用戶可以最大限度的自定義自己的,以豐富自己的功能,增加在市場(chǎng)上的競(jìng)爭(zhēng)力。Android平臺(tái)以Linux系統(tǒng)作為平臺(tái)的根底,使用Linux內(nèi)核可以加快軟件移植速度。本文以Android開(kāi)發(fā)平臺(tái)為根底,首先簡(jiǎn)要介紹了安卓平臺(tái)開(kāi)展歷程、以及當(dāng)前國(guó)內(nèi)外的開(kāi)展現(xiàn)狀。然后詳細(xì)的介紹了Android開(kāi)發(fā)平臺(tái)的開(kāi)發(fā)環(huán)境。之后對(duì)基于Android平臺(tái)的音樂(lè)播發(fā)器系統(tǒng)做了一個(gè)詳細(xì)的需求分析。在需求分析結(jié)束后詳細(xì)論述了音樂(lè)播放器的詳細(xì)設(shè)計(jì)。根據(jù)Android開(kāi)發(fā)平臺(tái)自身的結(jié)構(gòu)特點(diǎn),把音樂(lè)播放器的開(kāi)發(fā)分為兩個(gè)局部來(lái)進(jìn)行分析和設(shè)計(jì),一局部是窗口的設(shè)計(jì),主要是定義窗口的屬性和關(guān)聯(lián)窗口的處理函數(shù);另一局部是功能的實(shí)現(xiàn),主要是結(jié)合Android平臺(tái)提供的資源和對(duì)音樂(lè)播放器的功能分析最終實(shí)現(xiàn)定義的功能。最后對(duì)基于Android開(kāi)發(fā)平臺(tái)的音樂(lè)播放系統(tǒng)進(jìn)行功能測(cè)試與驗(yàn)證。關(guān)鍵詞:Android平臺(tái),音樂(lè)播放器,基于Android平臺(tái)的開(kāi)發(fā)與設(shè)計(jì)TheDesignandDevelopmentofMusicPlayerBasedonAndroidplatformAuthor:XXXTutor:XXXAbstractAndroidplatformisGoogle’Slatestlaunchofamobileplatform,theplatformforproceduresofmobiledevices,includesanoperatingsystems,amiddlewareandsomecriticalapplications.Theplatformdoesnotrequireanycharges.Thecodeiscompletelyopen.Developerscanquicklydevelopontheplatformsystemandotherdeveloperscanusetheresultsoftheworkbyotherdevelopers.Therefore,Itmadegreaterflexibilityforthedevelopmentofmobilephone,lesswork,shortcycle,rapidprototypingandone-stop,meanwhileuserscancustomizetheirmobilephonesbesttoenrichthefunctionsoftheircellphones,competitivenessofmobilephonesmarket.AndroidplatformisbasedonLinuxsystemsusingtheLinuxkernel.Thesoftwarecallspeeduptherateoftransplantation.ThisarticletakestheAndroiddevelopingplatformasafoundation.Firstitbrieflyintroducesandroidplatformdevelopment,aswellasthecurrentdomesticandforeigndevelopmentpresentsituation.Afterthediscussionoftherationaleabove,thisarticleintroducesthedevelopmentenvironmentofAndroiddevelopingplatformindetailandmakesadetaileddemandanalysistoMusicplayerbasedontheAndroiddevelopingplatform.ThenthisarticlegivesadetailedsoftwaredesignofMusicplayer.BasedontheAndroiddevelopingplatform’sfeature.IdividetheMusicplayer’sdevelopmentintotwopartstoanalyzeanddesign.Onepartisthewindowdesign,mainlydefinesthewindowattributeandtheconnectedwindowprocessingfunction;Anotherpartisfunctionrealization,mainlyunifiestheresourceswhichtheAndroidplatformprovidesandfunctionanalysistotheMusicplayertoaccomplishthefunctionwhichwedefined.FinallyitcarriesonthefunctiontestbasedontheMusicplayerofAndroidplatform.KeyWords:Androidplatform,Musicplayer,TheDesignandDevelopmentbasedonAndroidplatform目錄TOC\o"1-3"\h\u43871緒論1118721.1工程背景 162911.2國(guó)內(nèi)外相關(guān)研究現(xiàn)狀及開(kāi)展趨勢(shì) 2221201.3工程研究意義 384601.4本文主要內(nèi)容 321562安卓平臺(tái)介紹5167262.1安卓平臺(tái)介紹 5150172.2安卓結(jié)構(gòu)具體分析 6202062.3Android系統(tǒng)的四大組件 730902.4安卓開(kāi)發(fā)環(huán)境搭建 9140122.4.1Java環(huán)境搭建 9247472.4.2安裝Eclipse開(kāi)發(fā)工具 10134472.4.3下載安裝SDK 109997安裝ADT插件 11132282.5AndroidFeatures特性 12281422.6數(shù)據(jù)存儲(chǔ)方式 13305882.6.1SharedPreferences 13265632.6.2File存儲(chǔ)方式 1336562.6.3SQLiteDatabase數(shù)據(jù)庫(kù) 1366832.7Android工程程序結(jié)構(gòu) 1420952.8AndroidManifest.xml文件 1567092.9安卓平臺(tái)的優(yōu)勢(shì) 17236973需求分析19175783.1軟件目標(biāo) 19300853.2軟件的可行性研究 198823.2.1經(jīng)濟(jì)上的可行性 1993133.2.2技術(shù)上的可行性 1973883.2.3操作上的可行性 20121013.3功能需求 2070243.3.1用例圖及用例描述 20266073.3.2音樂(lè)播放器的時(shí)序圖 2276473.4軟件規(guī)格說(shuō)明 23323764工程實(shí)現(xiàn)2559904.1歡送界面 2557934.2主界面 273151播放音軌SeekBar 287383播放調(diào)節(jié)功能實(shí)現(xiàn) 31295584.3歌詞顯示界面 34334.4歌曲列表界面 38279004.5專輯列表界面 40247095音樂(lè)播放器的測(cè)試42162715.1測(cè)試模型 43321795.1.1V模型 43227665.1.2W模型 43204745.2測(cè)試模型的選擇 44132025.3測(cè)試方法 45178625.3.1白盒測(cè)試 45211585.3.2黑盒測(cè)試 45128635.3.3測(cè)試方法的選擇 46201475.4功能的測(cè)試與實(shí)現(xiàn) 4676245.4.1播放器整體功能的實(shí)現(xiàn) 461675.4.2播放器主要模塊功能測(cè)試 47285135.5測(cè)試結(jié)論 4715715.6測(cè)試過(guò)程與總結(jié) 4724127結(jié)論 4928981致謝 5021792參考文獻(xiàn) 5118156附錄 521緒論Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能和平板電腦,由Google公司和開(kāi)放聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)。尚未有統(tǒng)一中文名稱,中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由AndyRubin開(kāi)發(fā),主要支持。2005年8月由Google收購(gòu)注資。2007年11月,Google與84家硬件制造商、軟件開(kāi)發(fā)商及電信營(yíng)運(yùn)商組建開(kāi)放聯(lián)盟共同研發(fā)改進(jìn)Android系統(tǒng)。隨后Google以Apache開(kāi)源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第一部Android智能發(fā)布于2008年10月。Android逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游戲機(jī)等。2011年第一季度,Android在全球的市場(chǎng)份額首次超過(guò)塞班系統(tǒng),躍居全球第一。2012年11月數(shù)據(jù)顯示,Android占據(jù)全球智能操作系統(tǒng)市場(chǎng)76%的份額,中國(guó)市場(chǎng)占有率為90%[1]。1.1工程背景隨著計(jì)算機(jī)的廣泛運(yùn)用,市場(chǎng)的迅速開(kāi)展,各種音頻視頻資源也在網(wǎng)上廣為流傳,這些資源看似平常,但已經(jīng)漸漸成為人們生活中必不可少的一局部了。于是各種播放器也緊跟著開(kāi)展起來(lái),但是很多播放器一味追求外觀花哨,功能龐大,對(duì)用戶的造成了很多資源浪費(fèi),比方CPU,內(nèi)存等的占用率過(guò)高,在用戶需要多任務(wù)操作時(shí),受到了不小的影響,帶來(lái)了許多不便,而對(duì)于大多數(shù)普通用戶,許多功能用不上,形同虛設(shè)。針對(duì)以上各種弊端,選擇了開(kāi)發(fā)多語(yǔ)種的音頻視頻播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶(如聽(tīng)歌,看電影)的需求,除了能播放常見(jiàn)格式的語(yǔ)音視頻文件,高級(jí)功能:還能播放RMVB格式的視頻文件。此外,還能支持中文、英文等語(yǔ)言界面。

要研究各種市場(chǎng)上流行的播放器,了解它們各自的插件及編碼方式,還有各種播放器播放的特別格式文件,分析各種編碼的優(yōu)缺點(diǎn)以及各種播放器本身存在的缺陷和特點(diǎn),編寫(xiě)出功能實(shí)用,使用方便快捷的播放器。目前已經(jīng)實(shí)現(xiàn)的功能有能播放常見(jiàn)音頻文件的功能,如MP3,WAV,等,擁有播放菜單,能選擇播放清單,具備一般播放器的功能,如快進(jìn),快退,音量調(diào)節(jié)等。1.2國(guó)內(nèi)外相關(guān)研究現(xiàn)狀及開(kāi)展趨勢(shì)在Linux上流行的播放器有多種主要有Xmms,RealPlayer,Xmovie,QuickTime,Mplayer等,以下對(duì)這些播放器進(jìn)行分析介紹。1、XmmsXmms是X-Window系統(tǒng)下最流行的多媒體播放器之一,大多數(shù)Linux版本都捆綁了改產(chǎn)品最為L(zhǎng)inux下的標(biāo)配音頻播放器,Xmms可以播放MP3、MOD、Wav等多媒體文件,而且只要提供相應(yīng)的插件,它還可以支持而更多的多媒體類型。2、XmovieXmovie最早是作為電視節(jié)目的播放軟件。它的播放界面非常簡(jiǎn)單。界面上除了播放、快進(jìn)、快退、播放時(shí)間顯示和播放進(jìn)度顯示這幾個(gè)主要功能外,沒(méi)有其他控制功能。界面上方的選單條不含有任何播放控制功能,根本上都是對(duì)播放畫(huà)面的調(diào)整和環(huán)境變量的控制。Xmovie支持mpg,mov,vob,m2v等視頻格式,同時(shí)它還能夠播放MP2和MP3音頻格式的文件。3、RealPlayerRealPlayer在低帶寬下支持音頻、視頻多媒體的低損失傳輸,同時(shí)具有優(yōu)秀的流媒體在線播放能力。RealPlayerforLinux版本的操作界面與其Windows平臺(tái)下的版本類似。RealPlayer的后續(xù)版本增加了對(duì)微軟視頻和音頻的支持,并支持便攜式設(shè)備。4、QuickTimeQuickTime是蘋(píng)果公司開(kāi)發(fā)的流式音視頻解決方案,也是出現(xiàn)較早的流媒體文件格式之一,它由三個(gè)不同局部組成:QuickTimeMove(電影)文件格式,QuickTime媒體抽象層、QuickTime內(nèi)置媒體效勞系統(tǒng)。這類文件擴(kuò)展名通常是.mov,它所對(duì)應(yīng)的播放器是“QuickTime”。5、MPlayerMPlayer是Linux上的電影播放器,它的功能十分強(qiáng)大,能夠播放眾多格式的文件。MPlayer能使用眾多本地的Xanim,RealPlayer和Win32DLL邊解碼器,播放大多數(shù)MPEG、VOB、AVI、OGG、ASF/WMV等文件,也能播放VideoCD、SVCD、DVD和DivX格式的電影。MPlayer的另一個(gè)大的特色是支持廣泛的輸出設(shè)備,它可以在Xll、Xv、DGA、OpenGL、SVGAlib等下工作。目前,媒體播放器主要趨向以下幾個(gè)方向:首先,支持多樣化格式。Xmms、Xmovie、QuickTime主要是針對(duì)固定的媒體格式類型或傳輸協(xié)議,具有一定的專用性,因此難以滿足廣闊消費(fèi)者的的需求,如今的音頻,視頻格式越來(lái)越多,如常見(jiàn)的音頻WMA,MP3,MIDI以及視頻的RM,AVI等。如何能將能播放所有這些,是現(xiàn)今研究的方向。其次,可擴(kuò)展性也是一個(gè)必要的趨勢(shì),如今的播放器功能越來(lái)越強(qiáng)大,如何在現(xiàn)有的根底上使功能更全面,也是人們接受的一個(gè)因素。這就是本課題選用開(kāi)放式Android平臺(tái)的一個(gè)原因,代碼完全公開(kāi),為其功能擴(kuò)展提供方便的條件。1.3工程研究意義目前的音樂(lè)播放功能已經(jīng)是大家比擬關(guān)注的一個(gè)局部了,不少人在購(gòu)置的時(shí)候都會(huì)關(guān)心的音樂(lè)播放的能力,這也足以看出目前大家對(duì)音樂(lè)播放功能的重視,所以一款性能良好的音樂(lè)播放器軟件一定會(huì)受到歡送。和傳統(tǒng)的音樂(lè)播放器相比,播放音樂(lè)更加的容易攜帶,其他方面也都不輸于傳統(tǒng)音樂(lè)播放器所。一款專業(yè)的音樂(lè)播放軟件是中必不可少的要素,幾乎市場(chǎng)上所有的都擁有一個(gè)自帶的音樂(lè)播放軟件,通過(guò)軟件可以對(duì)音樂(lè)欣賞中一些必要的元素進(jìn)行人性化的設(shè)置,同時(shí)在操作的時(shí)候也能得到一定的便利,但是不能滿足用戶的所有要求,所以就出現(xiàn)了各種各樣的音樂(lè)播放軟件,來(lái)滿足不同用戶的不同要求。不同平臺(tái)的,所支持的音樂(lè)播放軟件也是各不相同,而現(xiàn)在最流行的平臺(tái)就是google的android平臺(tái)。Android播放器是近年來(lái)當(dāng)中比擬流行的音樂(lè)播放軟件.通過(guò)結(jié)合自己所學(xué)的知識(shí)來(lái)設(shè)計(jì)和開(kāi)發(fā)Android音樂(lè)播放器,可以深入學(xué)習(xí)Android多媒體框架結(jié)構(gòu)和多媒體框架核心Opencore,并通過(guò)對(duì)Opencore的學(xué)習(xí)進(jìn)一步的認(rèn)識(shí)和理解Android多媒體播放機(jī)制,而且還可以在開(kāi)發(fā)軟件實(shí)物的過(guò)程中,熟悉軟件開(kāi)發(fā)流程,掌握Android領(lǐng)域小應(yīng)用開(kāi)發(fā)的方法,學(xué)習(xí)新的計(jì)算機(jī)知識(shí),豐富自己的知識(shí)面。Android平臺(tái)是完全開(kāi)放的平臺(tái),智能里的各種應(yīng)用軟件也越來(lái)越完備,在Android平臺(tái)設(shè)計(jì)和開(kāi)發(fā)一款音樂(lè)播放器可以擺脫不夠智能音樂(lè)播放器的因素,并且具有很廣闊的前景。1.4本文主要內(nèi)容本文的主要內(nèi)容是研究、分析和實(shí)現(xiàn)基于Android平臺(tái)的音樂(lè)播放器系統(tǒng),包括以下幾個(gè)局部:第1章簡(jiǎn)要介紹了Android平臺(tái)的背景及開(kāi)展情況。第2章研究了基于Android平臺(tái)的軟件開(kāi)發(fā)環(huán)境,主要包括Android平臺(tái)的產(chǎn)品支持、Android平臺(tái)軟件的消息機(jī)制。第3章詳述進(jìn)行基于Android平臺(tái)的音樂(lè)播放器的開(kāi)發(fā)的整個(gè)過(guò)程,包括對(duì)軟件的需求分析、軟件的結(jié)構(gòu)設(shè)計(jì)。第4章主要表達(dá)了播放器的詳細(xì)設(shè)計(jì),包括主要模塊功能的實(shí)現(xiàn)以和局部核心代碼。第5章是對(duì)音樂(lè)播放器的軟件測(cè)試,主要是對(duì)其功能驗(yàn)證,確定是否符合軟件規(guī)格要求,最后對(duì)全文進(jìn)行一個(gè)總結(jié)。2安卓平臺(tái)介紹2.1安卓平臺(tái)介紹Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能和平板電腦,由Google公司和開(kāi)放聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)。Android操作系統(tǒng)最初由AndyRubin開(kāi)發(fā),主要支持。2005年8月由Google收購(gòu)注資。2007年11月,Google與84家硬件制造商、軟件開(kāi)發(fā)商及電信營(yíng)運(yùn)商組建開(kāi)放聯(lián)盟共同研發(fā)改進(jìn)Android系統(tǒng)。隨后Google以Apache開(kāi)源許可證的授權(quán)方式,發(fā)布了Android的源代碼。Android逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游戲機(jī)等。Android的架構(gòu)圖如圖2.1所示。圖2.1Android的架構(gòu)圖Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,Android分為四個(gè)層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層。2.2安卓結(jié)構(gòu)具體分析1、應(yīng)用程序Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語(yǔ)言編寫(xiě)的。2.、應(yīng)用程序框架開(kāi)發(fā)人員也可以完全訪問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的平安性)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。隱藏在每個(gè)應(yīng)用后面的是一系列的效勞和系統(tǒng),其中包括;豐富而又可擴(kuò)展的視圖(Views),可以用來(lái)構(gòu)建應(yīng)用程序,它包括列表(Lists),網(wǎng)格(Grids),文本框(Textboxes),按鈕(Buttons),甚至可嵌入的web瀏覽器。內(nèi)容提供器(ContentProviders)使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)),或者共享它們自己的數(shù)據(jù)。資源管理器(ResourceManager)提供非代碼資源的訪問(wèn),如本地字符串,圖形,和布局文件(Layoutfiles)。通知管理器(NotificationManager)使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息?;顒?dòng)管理器(ActivityManager)用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。3、系統(tǒng)運(yùn)行庫(kù)Android包含一些C/C++庫(kù),這些庫(kù)能被Android系統(tǒng)中不同的組件使用。它們通過(guò)Android應(yīng)用程序框架為開(kāi)發(fā)者提供效勞。以下是一些核心庫(kù):(1)系統(tǒng)C庫(kù)——一個(gè)從BSD繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù)Libc,它是專門(mén)為基于Embeddedlinux的設(shè)備定制的。(2)媒體庫(kù)——基于PacketVideoOpenCORE;該庫(kù)支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等。(3)SurfaceManager——對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供了2D和3D圖層的無(wú)縫融合。(4)LibWebCore——一個(gè)最新的Web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的Web視圖。4、安卓運(yùn)行時(shí)庫(kù)Android包含一個(gè)核心庫(kù)的集合,提供大局部在Java編程語(yǔ)言核心類庫(kù)中可用的功能。每一個(gè)android應(yīng)用程序是Dalvik虛擬機(jī)中的實(shí)例,運(yùn)行在自己的進(jìn)程中。Dalvik虛擬機(jī)被設(shè)計(jì)成,在一個(gè)設(shè)備可以高效地運(yùn)行多個(gè)虛擬機(jī)。Dalvik虛擬機(jī)可執(zhí)行文件格式是dex,dex格式是專為Dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。Dalvik虛擬機(jī)依賴于Linux內(nèi)核提供根本功能,如線程和底層管理。5、Linux內(nèi)核Android基于Linuxversion2.6內(nèi)核來(lái)提供系統(tǒng)的核心效勞,例如:平安機(jī)制,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)堆棧和驅(qū)動(dòng)模塊。該內(nèi)核還扮演著一個(gè)虛擬的中間層,該層介于硬件和其余的軟件堆棧[2]。2.3Android系統(tǒng)的四大組件在Android系統(tǒng)中,為我們提供了四大根本組件,每個(gè)組件是一個(gè)視圖,但是有些是可見(jiàn)的,有些是不可見(jiàn)的視圖,像Activity,ContentProvider是可見(jiàn)的視圖,Service和BroadcastReceiver是不可見(jiàn)的,它們只在系統(tǒng)的后臺(tái)運(yùn)行。下面分別介紹四大組件:(1)Activity簡(jiǎn)介在Android系統(tǒng)中Activity提供可視化的用戶界面,一個(gè)Android應(yīng)用通常由多個(gè)Activity組成。多個(gè)Activity組成了Activity棧(Stack),當(dāng)前活動(dòng)的Activity處于棧頂。Activity有自己的生命周期,由Android系統(tǒng)來(lái)控制。(2)Service簡(jiǎn)介顧名思義Service就是運(yùn)行在后臺(tái)的一種效勞程序,一般很少和用戶交互,因此沒(méi)有可視化界面定義一個(gè)Service類比擬簡(jiǎn)單,只要繼承Service類,實(shí)現(xiàn)其生命周期中的方法就可以了。一個(gè)定義好的Service必須在AndroidManifest.xml配置文件 注冊(cè),通過(guò)<service>元素聲明才能使用.Service有自己的生命周期,我們可以調(diào)用startService()啟動(dòng)一個(gè)Service或者bindService()方法來(lái)綁定一個(gè)存在的Service。(3)BroadcastReceiver簡(jiǎn)介BroadcastReceiver顧名思義播送接收器,它和事件處理機(jī)制類似,只不過(guò)事件處理機(jī)制是程序組件級(jí)別的(例如,某個(gè)按鈕的單擊事件),而播送事件處理機(jī)制是系統(tǒng)級(jí)別的。到目前為止我們可以使用Intent來(lái)啟動(dòng)一個(gè)程序組件,我們還可以通過(guò)使用sendBroadcast()方法來(lái)發(fā)起一個(gè)系統(tǒng)級(jí)別的事件播送來(lái)傳遞消息。我們可以在你的應(yīng)用程序中實(shí)現(xiàn)BroadcastReceiver來(lái)監(jiān)聽(tīng)和響應(yīng)這些播送的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è)媒體中介的作用,專門(mén)提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。例如,在一個(gè)聯(lián)系人維護(hù)的應(yīng)用中,當(dāng)我們?cè)谝粋€(gè)聯(lián)系人列表屏幕(假設(shè)對(duì)應(yīng)的Activity為L(zhǎng)istActivity)上,點(diǎn)擊某個(gè)聯(lián)系人后,希望能夠跳出此聯(lián)系人的詳細(xì)信息屏幕(假設(shè)對(duì)應(yīng)的Activity為detailActivity)。為了實(shí)現(xiàn)這個(gè)目的,ListActivity需要構(gòu)造一個(gè)Intent,這個(gè)Intent用于告訴系統(tǒng),我們要做“查看”動(dòng)作,此動(dòng)作對(duì)應(yīng)的查看對(duì)象是“某聯(lián)系人”,然后調(diào)用startActivity(Intentintent),將構(gòu)造的Intent傳入,系統(tǒng)會(huì)根據(jù)此Intent中的描述,到ManiFest中找到滿足此Intent要求的Activity,系統(tǒng)會(huì)調(diào)用找到的Activity,即為detailActivity,最終傳入Intent,detailActivity那么會(huì)根據(jù)此Intent中的描述,執(zhí)行相應(yīng)的操作。(4)ContentProvider簡(jiǎn)介ContentProvider用來(lái)保存和檢索數(shù)據(jù),并且使應(yīng)用程序之間相互訪問(wèn)數(shù)據(jù)成為可能。它是跨應(yīng)用程序共享數(shù)據(jù)的唯一方法。Android為常用的數(shù)據(jù)類型(如:音視頻、圖片和聯(lián)系方式等)提供了大量的ContentProvider。它們被定義在Avider包下面。通過(guò)這樣定義好的ContentProvider我們可以方便的進(jìn)行數(shù)據(jù)操作。當(dāng)然我們必須擁有適當(dāng)?shù)臋?quán)限。我們也可以自己來(lái)定ContentProvider共享我們的數(shù)據(jù),方便用戶的訪問(wèn)[4]。2.4安卓開(kāi)發(fā)環(huán)境搭建2.4.1Java環(huán)境搭建Android支持WindowsXP以上操作系統(tǒng)。首先,需要有Java環(huán)境。方法很簡(jiǎn)單。第一步,登陸://java.sun,下載最新版本的jdk安裝jdk和jre兩個(gè)局部。選擇目錄,安裝(最好將兩局部放在同一個(gè)盤(pán)符)。點(diǎn)擊下一步即可。我這里安裝在C盤(pán)目錄下。第二步,需要配置環(huán)境變量。右擊“我的電腦”,在彈出的窗口中選擇屬性,在左邊高級(jí)系統(tǒng)設(shè)置點(diǎn)擊環(huán)境變量按鈕,點(diǎn)擊右下角的新建按鈕變量名:JAVA_HOME,值C:\jdk(你的jdk安裝目錄),點(diǎn)擊確定輸入。以同樣的方法新建變量名為;CLASSPATH,值為:.;%JAVA_HOME%\lib。注意,點(diǎn)號(hào)表示當(dāng)前目錄,不能省略。如圖2.2圖2.2環(huán)境變量配置然后在系統(tǒng)變量中找到“path”,并點(diǎn)擊修改,在其對(duì)應(yīng)的最后面追加“%JAVA_HOME%\bin;”,一直點(diǎn)擊確定按鈕,直到所有的窗口關(guān)閉。如圖2.3。這樣Java的環(huán)境搭建完畢。翻開(kāi)“運(yùn)行”窗口,輸入CMD命令,在提示符窗口中輸入java-version,如果顯示如圖2.4的信息說(shuō)明搭建成功。圖2.3環(huán)境變量配置圖2.4環(huán)境搭建成功顯示信息2.4.2安裝Eclipse開(kāi)發(fā)工具Eclipse的安裝比擬簡(jiǎn)單,登錄Eclipse官網(wǎng),下載EclipseIDEforJavaDevelopers。直接解壓就可以了。2.4.3下載安裝SDK首先,到SDK官方網(wǎng)站下載SDK包,然后解壓。雙擊SDKManager.exe顯示如圖2.5,下載所需要的組件圖2.5SDK下載組件界面安裝ADT插件在eclipse中安裝插件,翻開(kāi)eclipse,點(diǎn)擊help>InstallnewSoftware進(jìn)入后,點(diǎn)擊add,命名及點(diǎn)擊Archive選擇你下載的ADT壓縮包,點(diǎn)擊OK,會(huì)解析出該插件的全部可用內(nèi)容,全選(selectall),點(diǎn)擊下一步...安裝時(shí)需要一定時(shí)間,在安裝的過(guò)程中會(huì)出現(xiàn)一些提示,點(diǎn)擊允許即可,安裝完ADT插件后,點(diǎn)擊window-->preference,發(fā)現(xiàn)左側(cè)列表上多了一項(xiàng)android,點(diǎn)擊android會(huì)提示錯(cuò)誤,是因?yàn)檫€沒(méi)有把SDK關(guān)聯(lián)到ADT插件上,添加SDK目標(biāo)位置,如圖2.6。圖2.6添加SDK目標(biāo)文件夾到這里,Android的開(kāi)發(fā)環(huán)境就搭建完成了。然后創(chuàng)立一個(gè)安卓模擬器就可以做安卓開(kāi)發(fā)了如圖2.7。圖2.7安卓模擬器界面2.5AndroidFeatures特性Android系統(tǒng)有如下的幾大特性:(1)應(yīng)用程序框架支持組件的重用與替換。 (2)Dalvik虛擬機(jī)專門(mén)為移動(dòng)設(shè)備做了優(yōu)化。 (3)內(nèi)部集成瀏覽器該瀏覽器基于開(kāi)源的WebKit引擎。 (4)優(yōu)化的圖形庫(kù)包括2D和3D圖形庫(kù),3D圖形庫(kù)基于OpenGLES。 (5)SQLite用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)。 (6)多媒體支持包括常見(jiàn)的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)。 (7)GSM(依賴于硬件)。 (8)藍(lán)牙Bluetooth,EDGE,3G,andWiFi(依賴于硬件)。 (9)照相機(jī),GPS,指南針,和加速度計(jì)(依賴于硬件)。 (10)豐富的開(kāi)發(fā)環(huán)境包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開(kāi)發(fā)環(huán)境插件。2.6數(shù)據(jù)存儲(chǔ)方式在播放器正常運(yùn)行時(shí),由于各界面存在相互跳轉(zhuǎn),為了防止數(shù)據(jù)在界面跳轉(zhuǎn)的過(guò)程中喪失,我們需要將一些數(shù)據(jù)進(jìn)行臨時(shí)存儲(chǔ)或者永久存儲(chǔ)。Android作為一種操作系統(tǒng),提供了如下幾種存取數(shù)據(jù)的方式:Preferenc(配置)、File(文件)、SQLite數(shù)據(jù)和網(wǎng)絡(luò)。另外,在Android中各個(gè)應(yīng)用程序組件之間是相互獨(dú)立的,彼此的數(shù)據(jù)不能共享。為了實(shí)現(xiàn)數(shù)據(jù)的共享,Android提供了ContentProvider組件來(lái)實(shí)現(xiàn)應(yīng)用程序之間數(shù)據(jù)的共享。2.6.1SharedPreferencesPreferencePreference提供了一種輕量級(jí)的數(shù)據(jù)存取方法,一般數(shù)據(jù)比擬少,一些簡(jiǎn)單的配置信息。它以“鍵-值”(是一個(gè)Map)對(duì)的方式,將數(shù)據(jù)保存在一個(gè)XML配置文件中使用到的接口(詳細(xì)內(nèi)容見(jiàn)文檔)android.content.SharedPreferences提供了保存數(shù)據(jù)的方法,android.content.SharedPreferences.Editor提供了獲得數(shù)據(jù)的方法。2.6.2File存儲(chǔ)方式我們可以將一些數(shù)據(jù)直接以文件的形式保存在設(shè)備中。例如,一些文本文件、PDF文件、音視頻文件和圖片等。Android提供了文件讀寫(xiě)的方法:Context.openFileInput()獲得標(biāo)準(zhǔn)Java文件輸入流(FileInputStream),Context.openFileOutput()獲得標(biāo)準(zhǔn)Java文件輸出流(FileOutputStream),Resources.openRawResource(R.raw.myDataFile)方法返回InputStream。2.6.3SQLiteDatabase數(shù)據(jù)庫(kù)SQLite是一個(gè)嵌入式數(shù)據(jù)庫(kù)引擎,針對(duì)內(nèi)存等資源有限的設(shè)備(如、PDA、MP3)提供的一種高效的數(shù)據(jù)庫(kù)引擎SQLite數(shù)據(jù)庫(kù)不像其它的數(shù)據(jù)庫(kù)(如:Oracle),它沒(méi)有效勞器進(jìn)程。所有的內(nèi)容包含在同一個(gè)單文件中。該文件是跨平臺(tái)的可以自由拷貝?;谄渥陨淼南忍靸?yōu)勢(shì),SQLite在嵌入式領(lǐng)域得到了廣泛應(yīng)用。(1)SQLiteDatabase類SQLiteDatabase代表一個(gè)數(shù)據(jù)庫(kù)對(duì)象,提供了操作數(shù)據(jù)庫(kù)的一些常用方法如表2.8。表2.8操作數(shù)據(jù)庫(kù)的常用方法方法名稱方法描述OpenonCreatDatabase(Stringpath,SQLiteDatabase.CusorFactoryfactory)翻開(kāi)或者創(chuàng)立數(shù)據(jù)庫(kù)Insert(Stringtable,StringnullColumHack,ContentValuesvalues)添加一條記錄Delete(Stringtable,StringwhereClause,String[]whereArgs)刪除一條記錄Query(Stringtable,String[]colums,Stringselection,String[]selectionArgs,StringgoupBy,Stringhaving,StringorderBy)查詢記錄Update(Stringtable,ContentValues,StingwhereClause,String[]whereArgs)修改記錄exeSQL(Stringsql)執(zhí)行一條SQL語(yǔ)句Close〔〕關(guān)閉數(shù)據(jù)庫(kù)(2)SQLiteOpenHelper類SQLiteOpenHelper是SQLiteDatabase的一個(gè)幫助類,用來(lái)管理數(shù)據(jù)庫(kù)的創(chuàng)立和版本更新。一般的用法是定義一個(gè)類繼承之,并實(shí)現(xiàn)其兩個(gè)抽象方法onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)兩個(gè)抽象方法來(lái)創(chuàng)立和更新數(shù)據(jù)庫(kù),一些常用方法如表2.9。表2.9更新數(shù)據(jù)庫(kù)常用方法方法名稱方法描述SQLiteOpenHelper(Contextcontext,Stringname,SQLiteDatabase.CurorFactoryfactory,intversion)構(gòu)造方法,一般是傳遞一個(gè)要?jiǎng)?chuàng)立數(shù)據(jù)庫(kù)稱name參數(shù)onCreate(SQLiteDatabasedb)創(chuàng)立數(shù)據(jù)庫(kù)是調(diào)用onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)版本更新時(shí)調(diào)用getReadableDatabase()創(chuàng)立或翻開(kāi)一個(gè)只讀數(shù)據(jù)庫(kù)getWritableDatabase()創(chuàng)立或者翻開(kāi)一個(gè)讀寫(xiě)數(shù)據(jù)庫(kù)/data/data/package/shared_prefs/Android的三種數(shù)據(jù)存儲(chǔ)方式那么讓我們可以輕松方便的進(jìn)行程序編寫(xiě)和數(shù)據(jù)的訪問(wèn),更不會(huì)讓不該消失的數(shù)據(jù)消失,這對(duì)我們進(jìn)行程序書(shū)寫(xiě)有很大我?guī)椭?data/data/package/shared_prefs/2.7Android工程程序結(jié)構(gòu)Android工程根本結(jié)構(gòu)目錄包括:src(源代碼)、gen(Android系統(tǒng)自動(dòng)生成的常量)、Res(資源文件):主要存放程序界面的布局配置(.xml)文件和圖片資源。AndroidMainfes.xml(下節(jié)介紹)是四大組件的驅(qū)動(dòng)配置文件,有它的存在,Android程序的四大組件才可以正常的跳轉(zhuǎn)。Android資源的類型和布局(表2.10)。表2.10Android資源的類型和布局目錄結(jié)構(gòu)資源類型res/anim/XMLd動(dòng)畫(huà)文件res/drawable/一些位圖文件res/layout/xml布局文件res/value/各種xml資源文件Arrays.xml:XML數(shù)據(jù)文件Colors.xml:XML顏色文件Dimens.xml:XML尺寸文件Styles.xml:XML樣式文件res/xml/任意的XML文件res/raw/直接拷到設(shè)備中的原生文件res/menr/XML菜單文件2.8AndroidManifest.xml文件Android系統(tǒng)的任何一個(gè)程序啟動(dòng)都需要AndroidManifest.xml來(lái)啟動(dòng)程序,任何一個(gè)新建的工程目錄都會(huì)自動(dòng)生成一個(gè)AndroidManifest.xml文件,此配置文件是整個(gè)程序能夠正常運(yùn)行的核心,它里面包含了AndroidSDK的版本,程序運(yùn)行的默認(rèn)Activity,當(dāng)程序中的任何一個(gè)組件觸發(fā)事件后,系統(tǒng)都會(huì)自動(dòng)的去AndroidManifest.xml中尋找標(biāo)識(shí)來(lái)作出相應(yīng)的操作。任何一個(gè)AndroidManifest.Xml文件的格式都應(yīng)為:<?xmlversion="1.0"encoding="utf-8"?><manifest><application><activity><intent-filter><action/><category/></intent-filter></activity></application><uses-sdk/><uses-permission/></manifest>Android系統(tǒng)有一個(gè)編碼的規(guī)定,支持的編碼是"utf-8",當(dāng)程序中出現(xiàn)亂碼是,我們須將其編碼格式轉(zhuǎn)化為"utf-8".在AndroidManifest.xml中會(huì)在第一行聲明一句:<?xmlversion="1.0"encoding="utf-8"?>。它是該系統(tǒng)支持的版本和編碼。在第二行定義了我們需使用的架構(gòu),該架構(gòu)來(lái)自xmlns:Android=。Xmlns(XMLnamespace)是一個(gè)命名空間,它就像一條河的源頭一樣能讓我們找到系統(tǒng)架構(gòu),每一個(gè)配置文件必須有這個(gè)xmlns,否那么程序中的所使用的所有資源將無(wú)法找到。在application元素我們定義Android:icon="@drawable/icon"Android:label="@string/app_name",Android:icon是程序在中顯示的圖片,我們運(yùn)用@drawable/icon表示了對(duì)res/drawable目錄下的icon.png的引用。@string/app_name表示了對(duì)res/value目錄下string.Xml中定義的app_name參數(shù)的引用。因?yàn)橄到y(tǒng)首先要啟動(dòng)的Activity是C_MusicPlayerActivity,所以文件如下:<activityAndroid:name=".C_MusicPlayerActivity"><intent-filter><actionAndroid:name="Aent.action.MAIN"/><categoryAndroid:name="Aent.category.LAUNCHER"/></intent-filter></activity>在intent-filter選項(xiàng)中,有action和category等等屬性,我們需要定義action的值為Aent.action.MAIN,category的值為Aent.category.LAUNCHER,它們是系統(tǒng)的值,程序在解析到這些常用后就可以確定首先要啟動(dòng)的Activity。當(dāng)我們需要通過(guò)一個(gè)組件觸發(fā)另一個(gè)組件時(shí),我們將設(shè)定action和category的其它屬性值,系統(tǒng)會(huì)根據(jù)我們?cè)O(shè)定的屬性值去AndroidManifest.Xml的application中尋找標(biāo)識(shí),任何一個(gè)Activity的action和category是唯一,所以程序在任何時(shí)候都能唯一啟動(dòng)一個(gè)Activity,這樣,不同的Activity之間的跳轉(zhuǎn)就實(shí)現(xiàn)了。在AndroidManifest.Xml中有一個(gè)根結(jié)點(diǎn)<uses-sdk>,它是我們需要定義的ADT版本,例如我們將其值設(shè)定為Android:minSdkVersion="10",那么表示此Android工程所用的版本為2.3,Android還有1.1、1.5、1.6、2.0、2.1、2.2、2.3、3.0、4.0這幾個(gè)版本。如果我們需要對(duì)網(wǎng)絡(luò)進(jìn)行訪問(wèn),比方翻開(kāi)一個(gè)網(wǎng)頁(yè),剛我還需要設(shè)置一個(gè)網(wǎng)絡(luò)訪問(wèn)權(quán)限uses-permission,將其的值設(shè)置為Android:name="Android.permission.INTERNET,我們就可以訪問(wèn)網(wǎng)絡(luò)了。當(dāng)然uses-permission還有很多其它的權(quán)限,例如GPS定位權(quán)限瀏覽器數(shù)據(jù)存取權(quán)限com.Android.browser.permission.READ_HISTORY_BOOKMARKS等等。當(dāng)程序的任何一個(gè)組件要用到時(shí),都必須在AndroidManifest.Xml文件中聲明。四大組件要使用前都需要聲明,其聲明方式如下:<service></service><provider></provider><activity></activity><receiver></receiver>其中聲明provider時(shí)還需要聲明其授權(quán)authorities。每個(gè)組件里面還有很多的屬性,會(huì)根據(jù)程序的具體需要定義不同的屬性。過(guò)濾器intent-filter有兩種啟動(dòng)方式來(lái)啟動(dòng)界面。(1)顯示方式顯示方式是在代碼中的直接啟動(dòng)組件,啟動(dòng)時(shí)會(huì)聲明Intent,在它的構(gòu)造方法Intent(組件1,組件2)中直接指定一個(gè)組件的名字,然后調(diào)用方法startIntent(intent)以啟動(dòng)指定的組件。(2)隱式方式隱式方式是通過(guò)過(guò)濾器來(lái)過(guò)濾完成的,啟動(dòng)的組件必須滿足action和category的條件才能夠啟動(dòng)該組件。這些屬性是在AndroidManifest.Xml文件中聲明的。兩種啟動(dòng)方式都可以通過(guò)程序setAction(ACTION常量)和startActivity(intent)或配置文件兩種方式來(lái)實(shí)現(xiàn)組件的跳轉(zhuǎn)。2.9安卓平臺(tái)的優(yōu)勢(shì)(1)開(kāi)放性在優(yōu)勢(shì)方面,Android平臺(tái)首先就是其開(kāi)發(fā)性,開(kāi)發(fā)的平臺(tái)允許任何移動(dòng)終端廠商參加到Android聯(lián)盟中來(lái)。顯著的開(kāi)放性可以使其擁有更多的開(kāi)發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個(gè)嶄新的平臺(tái)也將很快走向成熟。開(kāi)發(fā)性對(duì)于Android的開(kāi)展而言,有利于積累人氣,這里的人氣包括消費(fèi)者和廠商,而對(duì)于消費(fèi)者來(lái)講,最大的受益正是豐富的軟件資源。開(kāi)放的平臺(tái)也會(huì)帶來(lái)更大競(jìng)爭(zhēng),如此一來(lái),消費(fèi)者將可以用更低的價(jià)位購(gòu)得心儀的。(2)不受束縛在過(guò)去很長(zhǎng)的一段時(shí)間,特別是在歐美地區(qū),應(yīng)用往往受到運(yùn)營(yíng)商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營(yíng)商的控制。自從2007年iPhone上市后,用戶可以更加方便地連接網(wǎng)絡(luò),運(yùn)營(yíng)商的制約減少。隨著EDGE、HSDPA這些2G至3G移動(dòng)網(wǎng)絡(luò)的逐步過(guò)渡和提升,隨意接入網(wǎng)絡(luò)已不是運(yùn)營(yíng)商口中的笑談。(3)豐富的硬件這一點(diǎn)還是與Android平臺(tái)的開(kāi)放性相關(guān),由于Android的開(kāi)放性,眾多的廠商會(huì)推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容,如同從諾基亞Symbian風(fēng)格一下改用蘋(píng)果iPhone,同時(shí)還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。(4)方便開(kāi)發(fā)Android平臺(tái)提供給第三方開(kāi)發(fā)商一個(gè)十分寬泛、自由的環(huán)境,不會(huì)受到各種條條框框的阻擾,可想而知,會(huì)有多少新穎別致的軟件會(huì)誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如何控制正是留給Android難題之一。(5)Google應(yīng)用在互聯(lián)網(wǎng)的Google已經(jīng)走過(guò)10年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google效勞如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺(tái)將無(wú)縫結(jié)合這些優(yōu)秀的Google效勞。3需求分析軟件需求分析是軟件生存期中重要的一步,也是決定性的一步。需求分析是軟件定義時(shí)期的最后一個(gè)階段,它的根本任務(wù)是準(zhǔn)確地答復(fù)“系統(tǒng)必須做什么”這個(gè)問(wèn)題,深入描述軟件的功能和性能的需求[9]。在這一節(jié)中主要就是圍繞“Android開(kāi)發(fā)平臺(tái)的音樂(lè)播放器系統(tǒng)必須做什么”這個(gè)問(wèn)題來(lái)分析說(shuō)明的。3.1軟件目標(biāo)本系統(tǒng)屬于用戶常用的音樂(lè)播放器。可以方便用戶平時(shí)對(duì)音樂(lè)文件的操作。本系統(tǒng)應(yīng)到達(dá)以下目標(biāo):(1)軟件采用人機(jī)交互的方式,界面美觀友好,操作靈活、方便、富有個(gè)性化。(2)能夠?qū)σ魳?lè)文件進(jìn)行有效的管理。(3)系統(tǒng)應(yīng)最大限度地實(shí)現(xiàn)易維護(hù)性和易操作性。3.2軟件的可行性研究3.2.1經(jīng)濟(jì)上的可行性Android是Google歷經(jīng)數(shù)年和投資數(shù)億美元開(kāi)發(fā)出來(lái)的智能系統(tǒng),是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的操作系統(tǒng)。隨著各大移動(dòng)終端生產(chǎn)商大力開(kāi)發(fā)和生產(chǎn)基于Android的移動(dòng)智能設(shè)備,Android迅速得到業(yè)界和社會(huì)的認(rèn)可,并成為整個(gè)產(chǎn)業(yè)的熱點(diǎn),基于Android平臺(tái)的各類人才逐漸成為各大企業(yè)競(jìng)相爭(zhēng)奪的焦點(diǎn)。而且Android是一個(gè)開(kāi)放的系統(tǒng),不管是企業(yè)還是個(gè)人都可以參與來(lái)表達(dá)自己的創(chuàng)意和想法。3.2.2技術(shù)上的可行性Google發(fā)起了圍繞

Android

的組織——開(kāi)放聯(lián)盟,其英文全稱為“OpenHandsetAlliance”。它采用了軟件堆層(softwarestack,又名以軟件疊層)的架構(gòu),主要分為三局部。底層Linux內(nèi)核只提供根本功能;其他的應(yīng)用軟件那么由各公司自行開(kāi)發(fā),局部程序以Java編寫(xiě)。3.2.3操作上的可行性本系統(tǒng)采用Android框架,可以在eclipse中安裝Android開(kāi)發(fā)插件,使用Android模擬器也可以使用任意Android終端。模擬器和真正的Android沒(méi)有太大區(qū)別,人們對(duì)操作早已熟悉。3.3功能需求3.3.1用例圖及用例描述功能需求定義了開(kāi)發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了用戶的業(yè)務(wù)需求。用戶需求文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù)。針對(duì)音樂(lè)播放器分別對(duì)音樂(lè)播放功能進(jìn)行詳細(xì)的調(diào)研和分析,總結(jié)出如用戶需求信息,其用例圖如圖3.1所示。圖3.1播放器用例圖音樂(lè)播放器的用例描述如下:(1)用例名稱:播放參與者:用戶目標(biāo):使得用戶可以播放在播放列表中選中的歌曲前置條件:播放器正在運(yùn)行根本領(lǐng)件流:1.用戶單擊“播放”按鈕2.播放器將播放列表中的當(dāng)前的歌曲(2)用例名稱:暫停參與者:用戶目標(biāo):使得用戶可以暫停正在播放的歌曲前置條件:歌曲正在播放且未停止和暫停根本領(lǐng)件流:1.用戶單擊“暫停”按鈕2.播放器將暫停當(dāng)前的歌曲(3)用例名稱:上一首/下一首參與者:用戶目標(biāo):使得用戶可以聽(tīng)上一首或下一首歌曲前置條件:歌曲正在播放或暫停根本領(lǐng)件流:1.用戶單擊“上一首或下一首”按鈕2.播放器將播放上一首或下一首歌曲(4)用例名稱:播放列表參與者:用戶目標(biāo):使得用戶可以進(jìn)入播放清單前置條件:程序在運(yùn)行根本領(lǐng)件流:1.用戶單擊“清單”按鈕2.播放器進(jìn)入播放列表(5)用例名稱:歌詞顯示參與者:用戶目標(biāo):使得程序進(jìn)入播放器歌詞設(shè)置狀態(tài)前置條件:程序運(yùn)行在播設(shè)定界面根本領(lǐng)件流:1.用戶單擊“歌詞開(kāi)關(guān)按鈕”按鈕2.播放器顯示或關(guān)閉歌詞3.3.2音樂(lè)播放器的時(shí)序圖播放器對(duì)象之間的交互情況如圖3.2所示。圖3.2音樂(lè)播放器的時(shí)序圖3.3.3音樂(lè)播放器流程圖播放器工作流程圖如圖3.3所示。圖3.3音樂(lè)播放器流程圖3.4軟件規(guī)格說(shuō)明隨著的功能的不斷增加,音樂(lè)播放功能已經(jīng)是時(shí)下各大廠商方案中的標(biāo)配了。那么我們要做出怎樣的一款才能滿足消費(fèi)者的需求呢?僅僅能夠播放MP3音樂(lè)文件是遠(yuǎn)遠(yuǎn)不夠的。通過(guò)我們對(duì)市場(chǎng)的調(diào)研,總結(jié)出以下設(shè)計(jì)思路,這些思路應(yīng)該是我們MP3播放器的亮點(diǎn):絢麗的界面,強(qiáng)大的功能,簡(jiǎn)單的操作。根據(jù)以上的設(shè)計(jì)思路,我們做出了以下詳細(xì)的定義:(1)播放音樂(lè)文件。(2)播放文件時(shí)實(shí)現(xiàn)暫停,停止。(3)播放文件時(shí)支持前一首或后一首音樂(lè)文件與當(dāng)前音樂(lè)文件的切換。(4)播放文件時(shí)支持進(jìn)度條的顯示。(5)播放音樂(lè)文件時(shí),支持背景動(dòng)畫(huà)。(6)主播放界面支持播放方式的選擇。(7)主播放界面支持文件序號(hào)及文件名稱的顯示。(9)支持文件列表。(10)支持歌詞文件同步。3.5運(yùn)行環(huán)境操作系統(tǒng):Android基于Linux操作系統(tǒng)。支持環(huán)境:Android4.1.2版本。開(kāi)發(fā)環(huán)境:EclipseSDKVersion:4.2.2。4工程實(shí)現(xiàn)4.1歡送界面在歡送界面模塊的設(shè)計(jì)中,應(yīng)用了LinearLayout布局和Animation效果。歡送界面模塊運(yùn)行結(jié)果如圖4.1所示。圖4.1音樂(lè)播放器歡送界面(1)頁(yè)面的設(shè)計(jì)整體采用線性布局(LinearLayout),并且有一個(gè)圖像顯示控件ImageView還有有Animation動(dòng)畫(huà)效果。頁(yè)面布局xml文件具體如下:<LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:id="@+id/iv1"android:background="@drawable/loading_bkg"android:layout_width="fill_parent"android:layout_height="fill_parent"/></LinearLayout>(2)代碼實(shí)現(xiàn)歡送界面模塊主要是用于給用戶一種友好的體驗(yàn),讓用戶較容易接受本軟件。歡送界面的主要代碼如下:publicclassLoadingActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ protectedvoidonCreate(BundlesavedInstanceState){ //TODOAuto-generatedmethodstub super.onCreate(savedInstanceState); //設(shè)置全屏顯示 requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.loading); ImageViewiv1=(ImageView)findViewById(R.id.iv1); Animationanimation=(AnimationSet)AnimationUtils.loadAnimation(this, R.anim.rotary_magnify); iv1.startAnimation(animation); newHandler().postDelayed(newRunnable(){ publicvoidrun(){ //TODOAuto-generatedmethodstub Intentin=newIntent(LoadingActivity.this, C_MusicPlayerActivity.class); startActivity(in); finish(); } },3700); }}4.2主界面Android的每一個(gè)可視化界面,都有其的唯一的布局配置文件,該文件里面有各種布局方式,和各種資源文件如圖像,文字,顏色的引用,程序在運(yùn)行時(shí),可以通過(guò)代碼對(duì)各配置文件進(jìn)行讀取。這樣就可以形成不同的可視化界面和炫麗的效果。播放器主界面是一個(gè)Activity,Android工程在每個(gè)activity啟動(dòng)的時(shí)候會(huì)首先執(zhí)行Oncreate()方法,如下代碼: PublicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main;}該方法主要執(zhí)行界面的初始化操作,Activity有個(gè)設(shè)置布局的方法:Context.setContentView(layoutResID),參數(shù)為資源ID,該Id在工程目錄res/layout下,主界面布局文件名為main。歡送界面結(jié)束以后進(jìn)入主界面圖4.2所示,主界面主要采用相對(duì)布局(RelativeLayout)。圖4.2主界面4.2.1播放音軌SeekBar在main.xml文件中,SeekBar的代碼如下:<SeekBarandroid:id="@+id/player_seekbar"android:layout_width="220dip"android:layout_height="wrap_content"android:progressDrawable="@drawable/seekbar_style"android:background="@drawable/play_progress_background"android:thumb="@drawable/thumb"android:progress="0"android:max="0"/>上面代碼中有參數(shù)android:thumb="@drawable/thumb"為音軌游標(biāo)的圖片資源android:progressDrawable="@drawable/seekbar_style"為SeekBar條的風(fēng)格style。引用了drawable中的seekbay_style.xml文件,seekbay_style.Xml是自定義的配置文件,代碼如下:<?xmlversion="1.0"encoding="utf-8"?><layer-listxmlns:android="://schemas.android/apk/res/android"><!--<itemandroid:id="@android:id/background" android:android:drawable="@drawable/play_progress_background"></item>--><itemandroid:id="@android:id/progress"><clipandroid:drawable="@drawable/play_progress"></clip></item></layer-list>播放器最重要的一局部就是音軌與歌曲進(jìn)度同步的實(shí)現(xiàn)。音軌設(shè)置了兩個(gè)TextView用來(lái)顯示當(dāng)前歌曲播放的進(jìn)度時(shí)間和歌曲的長(zhǎng)度(圖4.3)。圖4.3播放音軌音軌對(duì)象SeekBar在歌曲剛開(kāi)始播放的時(shí)候調(diào)用方法SeekBar.setMax(),參數(shù)傳入歌曲的長(zhǎng)度。SeekBar.setProgress(1)設(shè)置游標(biāo)的起始進(jìn)度為1。然后程序運(yùn)行如下代碼:publicvoidstartSeekBarUpdate(){//TODOAuto-generatedmethodstubhandler.post(start); } Runnablestart=newRunnable(){publicvoidrun(){//TODOAuto-generatedmethodstubhandler.post(updatesb); } }; Runnableupdatesb=newRunnable(){publicvoidrun(){//TODOAuto-generatedmethodstub//獲取SeekBar走動(dòng)到那的時(shí)間 C_MusicPlayerActivity.play_time=myMediaPlayer .getCurrentPosition();//設(shè)置填充當(dāng)前獲取的進(jìn)度 C_MusicPlayerActivity.seekbar .setProgress(C_MusicPlayerActivity.play_time);//SeekBar的最大值填充歌曲時(shí)間 C_MusicPlayerActivity.seekbar.setMax(Music_infoAdapter.musicList .get(playing_id).getMusicTime());//線程延遲1000毫秒啟動(dòng)handler.postDelayed(updatesb,1000); } }; HandlermHandler=newHandler();//歌詞滾動(dòng)線程 RunnablemRunnable=newRunnable(){@Overridepublicvoidrun(){//TODOAuto-generatedmethodstub C_MusicPlayerActivity.lrc_view.SetIndex(LrcIndex()); C_MusicPlayerActivity.lrc_view.invalidate();mHandler.postDelayed(mRunnable,100); } };Android的線程的開(kāi)始是通過(guò)Handler類來(lái)進(jìn)行的,Handler類是線程與線程之間通信的橋梁,實(shí)現(xiàn)Runnable接口會(huì)實(shí)現(xiàn)里面的run方法,當(dāng)線程開(kāi)始的時(shí)候,Runnable中的run方法會(huì)向Handler發(fā)一個(gè)Message消息,這樣,Handler類就可以接收到run方法發(fā)送過(guò)來(lái)的不同的消息進(jìn)行不同的代碼處理。這樣就到達(dá)了各線程之間的通信。要啟動(dòng)一個(gè)線程調(diào)用Handler的方法postDelayed(Runnable,1000)表示線程睡眠時(shí)間是1000ms。以上代碼意思是讓播放歌曲的線程每隔1000ms,即每1秒對(duì)音軌的TextView重新設(shè)置時(shí)間且讓進(jìn)度條前進(jìn)1秒的進(jìn)度。對(duì)音軌進(jìn)行刷新。這樣就實(shí)現(xiàn)了歌詞同步功能SeekBar有一個(gè)監(jiān)聽(tīng)器,該監(jiān)聽(tīng)器的作用是一直保持著對(duì)進(jìn)度條的監(jiān)聽(tīng),當(dāng)我們用鼠標(biāo)向SeekBar的各位置進(jìn)行點(diǎn)擊時(shí),它會(huì)自動(dòng)監(jiān)聽(tīng)其位置,進(jìn)行相應(yīng)的位置顯示。這也是進(jìn)度條上的游標(biāo)會(huì)不停的移動(dòng)和歌詞時(shí)間會(huì)不停的變動(dòng)的原因。拖動(dòng)SeekBar事件:seekbar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){publicvoidonStopTrackingTouch(SeekBarseekBar){//TODOAuto-generatedmethodstub }publicvoidonStartTrackingTouch(SeekBarseekBar){//TODOAuto-generatedmethodstub }publicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){//TODOAuto-generatedmethodstub//判斷用戶是否觸拖SeekBar并且不為空才執(zhí)行if(fromUser&&ControlPlay.myMediaPlayer!=null){ ControlPlay.myMediaPlayer.seekTo(progress); }time_left.setText(Music_infoAdapter.toTime(progress)); } });播放調(diào)節(jié)功能實(shí)現(xiàn)各按鈕水平放置,從左到右依次是上一首、播放、下一首功能按鈕。用的是布局中的線性布局LinearLayout,;將其設(shè)置為水平,如圖4.4所示。圖4.4播放功能按鈕LinearLayout中依次放置播放/暫停,上一首、下一首按鈕屬性。配置文件代碼結(jié)構(gòu)如下:<LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="40dip"android:layout_alignParentBottom="true"> <ImageButton></ImageButton> <ImageButton></ImageButton> <ImageButton></ImageButton></LinearLayout>主要按鈕功能實(shí)現(xiàn)代碼:(1)“上一首”按鈕并實(shí)現(xiàn)功能left_ImageButton.setOnClickListener(newImageButton.OnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstub Intentplay_left=newIntent(C_MusicPlayerActivity.this, ControlPlay.class); play_left.putExtra("control","front"); startService(play_left); } });(2)“播放”按鈕并實(shí)現(xiàn)功能play_ImageButton.setOnClickListener(newImageButton.OnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstub Intentplay_center=newIntent(C_MusicPlayerActivity.this, ControlPlay.class); play_center.putExtra("control","play"); startService(play_center); } });(3)“下一首”并實(shí)現(xiàn)功能right_ImageButton.setOnClickListener(newImageButton.OnClickListener(){publicvoidonClick(Viewv){ Intentplay_right=newIntent(C_MusicPlayerActivity.this, ControlPlay.class); play_right.putExtra("control","next"); startService(play_right); } }); }Android的媒體播放原理:Android源程序已經(jīng)為我們封裝好了一個(gè)接口類,叫MediaPlayer。該接口在執(zhí)行行需要一個(gè)數(shù)據(jù)源,通過(guò)如下四個(gè)步驟:第一步:MediaPlayer.reset();復(fù)位操作,為以后的媒體準(zhǔn)備播放作準(zhǔn)備。第二步:傳入歌曲數(shù)據(jù)源,這里也是一個(gè)數(shù)據(jù)MediaPlayer.setDataSource(Stringpath);參數(shù)需要傳一個(gè)路徑,該接口類在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。第三步:準(zhǔn)備播放數(shù)據(jù)源,調(diào)用方法MediaPlayer.Prepare()。第四步:MediaPlayer.Start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再與程序有關(guān),需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start();讓其啟動(dòng)。4.3退出界面退出程序界面,如圖4.5,這個(gè)主要是實(shí)現(xiàn)退出程序功能,用戶如果想退出程序,按下返回,選擇是否退出程序。圖4.5退出程序界面是否退出程序主要代碼:publicbooleanonKeyDown(intkeyCode,KeyEventevent){if(keyCode==KeyEvent.KEYCODE_BACK){ Dialogdialog=newMyDialog(C_MusicPlayerActivity.this,R.style.MyDialog); dialog.setCanceledOnTouchOutside(true); dialog.show(); }returnsuper.onKeyDown(keyCode,event); }4.3歌詞顯示界面當(dāng)播放音樂(lè)文件時(shí),如果同時(shí)存在該歌曲的LRC格式的歌詞文件時(shí),系統(tǒng)會(huì)自動(dòng)匹配歌詞并且到達(dá)同步顯示的效果,如圖4.4所示。圖4.4歌詞顯示歌詞顯示模塊歌詞同步顯示代碼如下:protectedvoidonDraw(Canvascanvas){//TODOAuto-generatedmethodstubsuper.

溫馨提示

  • 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)論