2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  河北農(nóng)業(yè)大學(xué)</b></p><p><b>  本科畢業(yè)論文</b></p><p>  題 目: 基于Android的音樂播放器的設(shè)計與實(shí)現(xiàn) </p><p>  學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 </p><p>  專業(yè)班級: 軟件工程1002班

2、 </p><p>  學(xué) 號: 2010234040714 </p><p>  學(xué)生姓名: 張帥 </p><p>  指導(dǎo)教師姓名: 陳晨 </p><p>  指導(dǎo)教師職稱: 講師 </p><p>  二O一四 年 六

3、 月 一 日</p><p><b>  摘 要</b></p><p>  當(dāng)今社會的生活節(jié)奏越來越快,隨著移動硬件設(shè)備越來越先進(jìn),人們對移動設(shè)備的要求也越來越高,從以前的追求技術(shù)到現(xiàn)在的追求視覺效果,因此,也逐步提高了對系統(tǒng)的要求。本文主要是對Android系統(tǒng)上一的款音樂播放器應(yīng)用程序的設(shè)計與實(shí)現(xiàn)進(jìn)行討論。</p><p>  Andr

4、oid平臺是Google公司推出的一個手機(jī)平臺,它是一個開源的系統(tǒng),它底層是基于Linux的操作系統(tǒng),本論文以Android開發(fā)平臺為基礎(chǔ),首先介紹了安卓平臺的發(fā)展以及當(dāng)前國內(nèi)外的發(fā)展現(xiàn)狀。然后對安卓技術(shù)做了一個詳細(xì)介紹 ,之后對基于Android平臺的音樂播放器做了一個詳細(xì)的需求分析,在需求分析后詳細(xì)論述了音樂播放器的詳細(xì)設(shè)計。根據(jù)Android開發(fā)平臺自身的結(jié)構(gòu)特點(diǎn),把音樂播放器的開發(fā)分為兩個部分來進(jìn)行分析和設(shè)計,一部分是

5、窗口的設(shè)計,住要是定義窗口的屬性和關(guān)聯(lián)窗口的處理函數(shù);另一部分是功能的實(shí)現(xiàn),主要是結(jié)合Android平臺提供的資源和對音樂播放器的功能分析最終實(shí)現(xiàn)定義的功能。</p><p>  關(guān)鍵詞:安卓;開源系統(tǒng);音樂播放器</p><p><b>  Abstract</b></p><p>  The pace of life today’s soc

6、iety ,with more advanced hardware mobile devices for mobile devices ,people more and more is also high ,the requirements from the previous pursuit to pursuit the visual technology,therefore,also gradually improve the sys

7、tem requirements ,the paper mainly is to take on music player from system design and realization of the application is discussed. </p><p>  Android platform is Google’s latest launch of mobile platform ,the

8、system is an open source ,it is based on Linux systems using the Linux kernel .This article takes the Android development ,as well as the current domestic and foreign development present situation .After the discussion o

9、f rational above ,this article introduces the main technology of Android ,makes a detailed demand analysis to Music player ,then this article gives a detailed software design of Music player .Based on the Android </p&

10、gt;<p>  Keywords: Android; Open source system; music player</p><p><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 項目目的及意義1</p><p>  

11、1.2 對國內(nèi)外現(xiàn)狀的研究1</p><p>  1.3 論文組織結(jié)構(gòu)2</p><p>  2 安卓工程技術(shù)介紹3</p><p>  2.1 android介紹3</p><p>  2.1.1 Android Features特性3</p><p>  2.1.2 Android基本框架3</p

12、><p>  2.2 安卓應(yīng)用程序開發(fā)的核心技術(shù)5</p><p>  2.2.1 Android應(yīng)用程序開發(fā)語言5</p><p>  2.2.2 Android應(yīng)用程序組件5</p><p>  3 系統(tǒng)需求分析7</p><p>  3.1 軟件目標(biāo)7</p><p>  3.2 軟

13、件可行性研究7</p><p>  3.2.1 經(jīng)濟(jì)上的可行性7</p><p>  3.2.2 技術(shù)上的可行性7</p><p>  3.2.3 操作上的可行性7</p><p>  3.3 功能需求7</p><p>  3.3.1 用例圖及用例描述8</p><p>  3.3

14、.2 音樂播放器的時序圖9</p><p>  3.3.3 音樂播放器的流程圖10</p><p>  3.4 軟件規(guī)格說明10</p><p>  3.5 運(yùn)行環(huán)境11</p><p><b>  4 系統(tǒng)設(shè)計12</b></p><p>  4.1 界面設(shè)計12</p>

15、<p>  4.2 功能設(shè)計12</p><p>  4.2.1 音樂列表設(shè)計12</p><p>  4.2.2 音樂播放設(shè)計13</p><p>  4.2.3 音樂播放模式設(shè)計14</p><p>  4.2.4 歌詞設(shè)計14</p><p><b>  5 系統(tǒng)實(shí)現(xiàn)15<

16、;/b></p><p>  5.1 音樂播放列表15</p><p>  5.1.1 音樂列表界面15</p><p>  5.1.2 獲取手機(jī)中歌曲文件信息15</p><p>  5.1.3 在列表顯示界面中顯示音樂16</p><p>  5.2 音樂播放和播放的service實(shí)現(xiàn)18</

17、p><p>  5.2.1 音樂播放界面18</p><p>  5.2.2 實(shí)現(xiàn)service后臺音樂播放19</p><p>  5.3 音樂播放模式設(shè)置23</p><p>  5.3.1 播放模式設(shè)置界面23</p><p>  5.3.2 進(jìn)行播放模式選擇24</p><p> 

18、 5.4 歌詞處理和顯示25</p><p>  5.4.1 歌詞顯示模塊25</p><p>  5.4.2 歌詞解析模塊26</p><p><b>  6 總結(jié)29</b></p><p><b>  參考文獻(xiàn)30</b></p><p><b> 

19、 致 謝31</b></p><p><b>  1 緒論</b></p><p>  1.1 項目目的及意義</p><p>  現(xiàn)今生活節(jié)湊快,生活緊張,在日常休息之余,欣賞音樂是最好的舒緩壓力的方式之一。本項目的目的就是開發(fā)一個可以對主流音樂文件格式有很好的支持的音樂播放器。</p><p>  隨著

20、計算機(jī)的廣泛運(yùn)用,手機(jī)市場的迅速發(fā)展,各種音頻視頻資源也在網(wǎng)上廣為流傳,這些資源看似平常,但已經(jīng)漸漸成為人們生活中必不可少的一部分了。于是各種手機(jī)播放器也緊跟著發(fā)展起來,但是很多播放器一味追求外觀花哨,功能龐大,對用戶的手機(jī)造成了很多資源浪費(fèi),比如CPU,內(nèi)存等的占用率過高,在用戶需要多任務(wù)操作時,受到了不小的影響,帶來了許多不便,而對于大多數(shù)普通用戶,許多功能用不上,形同虛設(shè)。針對以上各種弊端,編寫一個簡潔,占用資源少,并能夠很好播放

21、本地音樂的播放器勢在必行。</p><p>  研究各種市場上流行的手機(jī)播放器,了解它們各自的插件及編碼方式,分析各種編碼的優(yōu)缺點(diǎn)以及各種播放器本身存在的缺陷和特點(diǎn),編寫出功能實(shí)用,使用方便快捷的播放器。目前已經(jīng)實(shí)現(xiàn)播放音樂文件的功能。擁有播放菜單,能選擇播放清單,具備一般播放器的功能。播放模式也比較完善,有單曲,順序,循環(huán),隨機(jī)播放等模式,給用戶一種輕松的體驗。</p><p>  1.

22、2 對國內(nèi)外現(xiàn)狀的研究</p><p>  目前手機(jī)的音樂播放功能已經(jīng)是大家比較關(guān)注的一個部分了,不少人在購買手機(jī)的時候都會關(guān)心手機(jī)的音樂播放的能力,這也足以看出目前大家對音樂播放功能的重視,所以一款性能良好的手機(jī)音樂播放器軟件一定會受到歡迎。和傳統(tǒng)的音樂播放器相比,手機(jī)播放音樂更加的容易攜帶,其他方面也都不輸于傳統(tǒng)音樂播放器所。 </p><p>  一款專業(yè)的音樂播放軟件是手

23、機(jī)中必不可少的要素,幾乎市場上所有的手機(jī)都擁有一個自帶的音樂播放軟件,通過軟件可以對音樂欣賞中一些必要的元素進(jìn)行人性化的設(shè)置,同時在操作的時候也能得到一定的便利,但是不能滿足用戶的所有要求,所以就出現(xiàn)了各種各樣的手機(jī)音樂播放軟件,來滿足不同用戶的不同要求。不同手機(jī)平臺的手機(jī),所支持的音樂播放軟件也是各不相同,而現(xiàn)在最流行的手機(jī)平臺就是Google的android手機(jī)平臺。 </p><p>  隨著科技

24、的快速發(fā)展,數(shù)碼電子設(shè)備基本上都含有MP3播放的功能。媒體播放器的發(fā)展有兩個趨勢。首先,支持多樣化格式,如常見的音頻格式WMA格式、MP3格式、MIDI格式等。這些格式如何能夠完美的播放,是現(xiàn)如今研究的一個主流方向。其次一個必要的趨勢就是播放器的可擴(kuò)展性,現(xiàn)如今音樂播放器的功能越來越多,用戶體驗越來越好,如何能讓播放器的功能比現(xiàn)有的更加完備,也是占領(lǐng)用戶群的一個因素。由于Android基于Linux內(nèi)核并且具有開源、免費(fèi)的特性,為播放性

25、能的提升提供了更加便利的條件。Android平臺的開放性,可以不僅推動了技術(shù)創(chuàng)新(包括平臺本身),也有利于降低開發(fā)成本,制造商定制具有特點(diǎn)的產(chǎn)品也很容易。因此,它有一個大的市場潛力。</p><p>  Android平臺是完全開放的平臺,智能手機(jī)里的各種應(yīng)用軟件也越來越完備,在Android平臺設(shè)計和開發(fā)一款音樂播放器可以擺脫不夠智能音樂播放器的因素,并且具有很廣闊的前景。</p><p&g

26、t;  1.3 論文組織結(jié)構(gòu)</p><p>  本文主要研究內(nèi)容有以下幾個方面:</p><p>  第一章 緒論。主要是對項目的背景和意義進(jìn)行簡要描述。</p><p>  第二章 安卓工程及技術(shù)介紹。對安卓及安卓技術(shù)相關(guān)等方面進(jìn)行介紹。</p><p>  第三章 需求分析。對整個系統(tǒng)的可行性,功能需求和運(yùn)行環(huán)境做出描述。</p&

27、gt;<p>  第四章 系統(tǒng)設(shè)計。對系統(tǒng)界面設(shè)計和功能設(shè)計做出描述。</p><p>  第五章 系統(tǒng)實(shí)現(xiàn)。對系統(tǒng)的實(shí)現(xiàn)國能做出描述,包括界面和代碼實(shí)現(xiàn)等。</p><p>  第六章 總結(jié)。簡要介紹程序的功能,自己的收獲和一些不足。</p><p>  2 安卓工程技術(shù)介紹</p><p>  2.1 android介紹&l

28、t;/p><p>  Android是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā)(在華注冊商標(biāo)名為“安致”),后由開放手機(jī)聯(lián)盟(Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術(shù)

29、,Google和其他幾十個手機(jī)公司建立開發(fā)手機(jī)聯(lián)盟。Android在未公開之前常被傳聞為Google電話或gPhone。大多傳聞?wù)J為Google開發(fā)的是自己的手機(jī)電話產(chǎn)品,而不是一套軟件平臺。到了2010年1月,Google開始發(fā)表自家品牌手機(jī)電話的Nexus One,截止到現(xiàn)在最新的手機(jī)型號為Nexus 5。</p><p>  2.1.1 Android Features特性</p><p

30、>  安卓系統(tǒng)有如下幾大特性:</p><p>  1.應(yīng)用程序框架 支持組建的重用與替換。</p><p>  2.Dalvik 虛擬機(jī) 專門為移動設(shè)備做了優(yōu)化。</p><p>  3.內(nèi)部集成瀏覽器 該瀏覽器基于開源的WebKit引擎。</p><p>  4.優(yōu)化的圖形庫 包括2D和3D圖形庫,3D圖形庫基于OpenGl ES。

31、</p><p>  5.SQLite 用作結(jié)構(gòu)化的數(shù)據(jù)存儲。</p><p>  6.多媒體支持 包括常見的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)。</p><p>  7.GSM電話 (依賴于硬件)。</p><p>  8.藍(lán)牙Bluetooth,EDGE,3G,安定WI

32、FI(依賴于硬件)。</p><p>  9.照相機(jī),GPS,指南針,和加速度計(依賴于硬件)。</p><p>  10.豐富的開發(fā)環(huán)境 包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件。</p><p>  2.1.2 Android基本框架</p><p>  Android基本框架如圖2.1所示。<

33、/p><p>  圖2.1 安卓基本框架</p><p>  其軟件層次結(jié)構(gòu)自上而下分為以下幾個層次:</p><p> ?。?)應(yīng)用程序(application)</p><p>  Application Android會同一核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有

34、的應(yīng)用程序都是用JAVA編寫的。</p><p>  (2)應(yīng)用程序框架(application framework)</p><p>  開發(fā)者完全可以訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來簡化組件軟件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其他的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過的遵循框架的安全性限制)。該應(yīng)用程序重用機(jī)制使得組件可以被用戶替換。<

35、;/p><p>  所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:</p><p>  a.可擴(kuò)展的視圖(Views)可以用來建應(yīng)用程序,包括列表(Lists),網(wǎng)格(grids),文本框,按鈕,甚至可以嵌入一個web瀏覽器。</p><p>  b.內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù),或者共享自己的數(shù)據(jù)。<

36、;/p><p>  c.資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和分層文件(Layout Files)。</p><p>  d.通知管理器(Notification Manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。e.活動類管理器(Activity Manager)用來管理應(yīng)用程序的生命周期并提供常見的導(dǎo)航回退功能。</p&g

37、t;<p> ?。?)各種庫和安卓運(yùn)行環(huán)境</p><p>  Android包括一個被Android系統(tǒng)中各種不同組件所使用的C/C++庫集。該庫通過Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。</p><p>  Android包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。</p><p>  每一個Android應(yīng)用程序都在

38、它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對于同時高效地運(yùn)行多個VMS來實(shí)現(xiàn)的。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對最小內(nèi)存使用做了優(yōu)化。該虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA匯編器編譯,然后通過SDK中的dx工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。</p><p>  Dalvik虛擬機(jī)依賴于linux的一些功能,比如線程機(jī)制和底層內(nèi)存管理

39、機(jī)制。</p><p><b> ?。?)操作系統(tǒng)層</b></p><p>  Android的核心系統(tǒng)服務(wù)依賴于Linux2.6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議和驅(qū)動模型。Linux內(nèi)核也同時作為硬件和軟件堆棧之間的硬件抽象層。</p><p>  2.2 安卓應(yīng)用程序開發(fā)的核心技術(shù)</p><p>  

40、2.2.1 Android應(yīng)用程序開發(fā)語言</p><p>  JAVA是Android上的主流開發(fā)語言,各種支持也最完善。Android發(fā)布的API和SDK也都主要是面向JAVA開發(fā)人員的。我的播放器實(shí)例也是用JAVA開發(fā)的。</p><p>  2.2.2 Android應(yīng)用程序組件</p><p>  Android 應(yīng)用程序最大的一個特點(diǎn)就是每個應(yīng)用都由若干

41、組件構(gòu)成。而且各個應(yīng)用程序的組件還可以相互調(diào)用(需要在代碼中設(shè)置相應(yīng)權(quán)限)。例如假設(shè)我們需要編寫一個內(nèi)嵌于網(wǎng)頁的程序,那么我們無需親自編寫瀏覽器,而是可以直接調(diào)用系統(tǒng)自帶的Chrome Lite瀏覽器組件。又如假設(shè)我們編寫了兩個應(yīng)用程序,其中一個程序中有列表顯示圖標(biāo)的組件,那么我們在另一個應(yīng)用程序中就可以使用該組件,而不需要在編寫該功能。也就是說,不同于我們平常編寫的程序,Android的應(yīng)用程序不是單一入口,而是可以從代碼的不同位置啟

42、動。這就要依靠組件來實(shí)現(xiàn)。</p><p>  Android應(yīng)用程序的組件有以下四種:</p><p><b>  Activity</b></p><p>  一個Activity實(shí)際上表現(xiàn)出來的就是一個程序的界面。這個界面可能有許多不同的形式,比如有列表形式,有文字形式,有圖像格子等形式。一個應(yīng)用程序也可能有不止一個Activity。比如

43、一耳光短消息的程序,需要有列表顯示所有消息的Activity,還至少需要一個編輯短信的Activity,還可能需要設(shè)置、菜單等界面。</p><p>  每個Activity都有一個默認(rèn)的窗口用于繪制界面,一般情況下,它是充滿全屏的,但是我們可以通過程序控制它,使其小于屏幕大小,也可以控制其浮動于其他窗口之上(如Android中的Toast信息)。</p><p>  Activity中顯

44、示出來的內(nèi)容其實(shí)是由view堆疊形成的,view是由View基類派生出來的各種形式的界面元素,如ListView,GridView等等,通過組合這些view,就形成了一個可見的Activity。我們可以用Activity.setContentView()方法來設(shè)置一個Activity中所要顯示的view。</p><p> ?。?)Services</p><p>  Service是一種

45、沒有界面的組件,同我們平常在Windows或Linux系統(tǒng)中所理解的“服務(wù)”一樣,Android上的service也是運(yùn)行在后臺的,運(yùn)行時間可以從系統(tǒng)啟動到系統(tǒng)關(guān)閉為止。對于許多應(yīng)用程序來說,service組件式至關(guān)重要的。以下載管理器為例,用戶肯定希望能夠在切換到其他程序時仍然在后臺繼續(xù)下載,這就需要用到service完成下載工作。而顯示下載進(jìn)度、已下載文件等信息則由Activity完成,同時我們還希望控制下載過程,如停止、繼續(xù)等,這

46、就需要Activity與service之間進(jìn)行通信。Android允許activity連接到或者綁定到service上,這樣就可以讓用戶在界面上控制后臺service的行為。</p><p>  (3)Broadcast Receivers</p><p>  Broadcast意為廣播消息,Android系統(tǒng)自身會發(fā)出許多廣播消息,如電量不足,用戶修改了全局設(shè)置等,各個應(yīng)用程序也以向整個

47、系統(tǒng)廣播消息,如文件下載。</p><p>  Broadcast receiver則是程序中專門用來接收廣播消息的組件,它沒有界面顯示,只負(fù)責(zé)監(jiān)聽、接收廣播消息,然后根據(jù)程序邏輯,啟動其他組件去處理廣播消息。它可以啟動一個Activity來同用戶交互,也可以使用NotificationManager向用戶發(fā)出通知。NitificationManager的 通知形式有許多種,不如說振動、響鈴、閃LED燈,還可以在

48、Android界面的消息欄處顯示信息。</p><p>  Content Providers</p><p>  Content provider是一種為其它應(yīng)用程序提供數(shù)據(jù)的組件。這些數(shù)據(jù)可以保存在文件中,也可以保存在SQLite數(shù)據(jù)庫中,還可以以其他任何有效的方式保存。ContentProvider類為我們提供了一系列保存數(shù)據(jù)的方法供我們調(diào)用,可以很方便地存儲數(shù)據(jù)。其它應(yīng)用程序在需要

49、使用這些數(shù)據(jù)時,可以用ContentResolver對象,使用其中的方法。ContentResolver可以與任何contentprovider交互,獲取其中的數(shù)據(jù)。</p><p>  只需要某個組件,Android就會盡力保證它的可用;如果該組件還沒有啟動,就啟動它,如果該組件所屬的應(yīng)用程序還沒擁有一個進(jìn)程,則為它啟動一個進(jìn)程,如果系統(tǒng)資源不足以容納一個新的進(jìn)程,則將后臺的某個進(jìn)程殺死為新進(jìn)程騰出資源。<

50、;/p><p><b>  3 系統(tǒng)需求分析</b></p><p>  軟件需求分析工作是軟件生存期中重要的一步,也是決定性的一步。軟件需求分析是一個不斷認(rèn)識和逐步細(xì)化的過程,該過程將軟件計劃階段所確定的軟件范圍逐步細(xì)化到可詳細(xì)定義的程度。需求分析還是軟件開發(fā)的基礎(chǔ),假定在該階段發(fā)現(xiàn)一個錯誤,解決它需要用一小時的時間,到設(shè)計、編程、測試和維護(hù)階段解決,則要花幾倍甚至更多

51、的時間。因此對于復(fù)雜系統(tǒng)而言,首先要進(jìn)行需求分析。開發(fā)人員應(yīng)該對用戶的要求及現(xiàn)實(shí)環(huán)境進(jìn)行調(diào)查和了解。</p><p><b>  3.1 軟件目標(biāo)</b></p><p>  本系統(tǒng)屬于用戶常用的音樂播放器??梢苑奖阌脩羝綍r對音樂文件進(jìn)行播放的操作。本系統(tǒng)應(yīng)達(dá)到以下目標(biāo): </p><p> ?。?)軟件采用人機(jī)交互的方式,界面美觀友好,操作靈

52、活、富有個性化。</p><p>  (2)能夠?qū)Ξ?dāng)前播放音樂進(jìn)行了解和控制。</p><p>  (3)系統(tǒng)應(yīng)最大限度地實(shí)現(xiàn)易維護(hù)性和易操作性。</p><p>  3.2 軟件可行性研究</p><p>  3.2.1 經(jīng)濟(jì)上的可行性</p><p>  Android基于Linux內(nèi)核且具有開源、免費(fèi)的特性,正式

53、由于Android擁有這一特性。它不僅推動了技術(shù)創(chuàng)新(包括平臺本身),也有利于降低開發(fā)成本。同時所需的軟件系統(tǒng)、硬件平臺等都是易于獲得的,且不需要android平臺的機(jī)器,用模擬器即可實(shí)現(xiàn)開發(fā)研究,開發(fā)成本低,容易實(shí)現(xiàn),從經(jīng)濟(jì)角度來看,該系統(tǒng)可行。</p><p>  3.2.2 技術(shù)上的可行性</p><p>  技術(shù)可行性要考慮現(xiàn)有的技術(shù)條件時候能夠順利完成開發(fā)工作,軟硬件配置時候滿足

54、開發(fā)的需求。本軟件用的是java開發(fā)語言,調(diào)試相對簡單,當(dāng)前的計算機(jī)硬件配置也完全能滿足開發(fā)的需求。因此在技術(shù)上絕對可行的。軟件方面,相關(guān)的開發(fā)軟件,可以方便的從網(wǎng)上下載,易于獲得,且可以滿足系統(tǒng)需求。</p><p>  3.2.3 操作上的可行性</p><p>  該課題是利用自己的計算機(jī),且使用Android模擬器,并且在本地上安裝JDK、Android跟Eclipse作為軟件的開

55、發(fā)平臺,使開發(fā)出來的系統(tǒng)有友好的用戶界面,操作簡單,因此在操作上是可行的。</p><p><b>  3.3 功能需求</b></p><p>  3.3.1 用例圖及用例描述</p><p>  功能需求定義了開發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了用戶的業(yè)務(wù)需求。用戶需求文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù)。針對

56、音樂播放器分別對音樂播放功能進(jìn)行詳細(xì)的調(diào)研和分析,總結(jié)出用戶需求信息,其用例圖如圖3.1所示。</p><p>  圖3.1 音樂播放器用例圖</p><p>  音樂播放器用例描述如下:</p><p><b>  用例名稱:播放</b></p><p><b>  參與者:用戶</b></

57、p><p>  目標(biāo):使得用戶可以播放在播放列表中選中的歌曲</p><p>  前置條件:播放器正在運(yùn)行</p><p>  基本事件流:1.用戶單擊音樂列表中的一項</p><p>  2.播放器將播放用戶所選中的歌曲</p><p><b>  用例名稱:暫停</b></p>&l

58、t;p><b>  參與者:用戶</b></p><p>  目標(biāo):使得用戶可以暫停正在播放的歌曲</p><p>  前置條件:播放器正在運(yùn)行</p><p>  基本事件流:1.用戶單擊“暫停”按鈕</p><p>  2.播放器將暫停當(dāng)前播放的歌曲</p><p>  用例名稱:上一首

59、/下一首</p><p><b>  參與者:用戶</b></p><p>  目標(biāo):使得用戶可以聽上一首或下一首歌曲</p><p>  前置條件:歌曲正在播放或暫停</p><p>  基本事件流:1.用戶單擊“上一首或下一首”按鈕</p><p>  2.播放器將播放上一首或下一首歌曲<

60、;/p><p><b>  用例名稱:播放列表</b></p><p><b>  參與者:用戶</b></p><p>  目標(biāo):使得用戶可以進(jìn)入播放清單</p><p>  前置條件:程序正在運(yùn)行</p><p>  基本事件流:1.用戶由播放歌曲界面返回至清單界面</

61、p><p>  2.播放器進(jìn)入播放列表</p><p><b>  用例名稱:歌詞顯示</b></p><p><b>  參與者:用戶</b></p><p>  目標(biāo):實(shí)現(xiàn)歌曲播放與歌詞同步</p><p>  前置條件:歌詞文件存在、程序運(yùn)行在播放界面</p>

62、<p>  基本事件流:1.顯示歌詞</p><p>  3.3.2 音樂播放器的時序圖</p><p>  播放器對象之間的交互情況如圖3.2所示。</p><p>  圖3.2 音樂播放器的時序圖</p><p>  3.3.3 音樂播放器的流程圖</p><p>  音樂播放器工作流程圖如圖3.3所示

63、。</p><p>  圖3.3 音樂播放器工作流程圖</p><p>  3.4 軟件規(guī)格說明</p><p>  隨著手機(jī)的功能的不斷增加,音樂播放功能已經(jīng)是時下各大手機(jī)廠商手機(jī)方案中的標(biāo)配了??偨Y(jié)設(shè)計思路和對市場的調(diào)研,對音樂播放器作出以下詳細(xì)的定義:</p><p><b>  (1)播放音樂文件</b><

64、/p><p>  (2)播放音樂文件時實(shí)現(xiàn)暫停,播放。</p><p>  (3)播放音樂文件時支持前一首或后一首音樂文件與當(dāng)前音樂文件的切換。</p><p>  (4)播放文件時支持進(jìn)度條顯示并顯示已播放時間。</p><p>  (5)可以設(shè)置播放模式。</p><p>  (6)顯示手機(jī)上音樂文件列表。</p

65、><p>  (7)支持歌詞文件同步。</p><p><b>  3.5 運(yùn)行環(huán)境</b></p><p>  操作系統(tǒng):Android手機(jī)基于Linux操作系統(tǒng)。</p><p>  支持環(huán)境:Android 2.3-4.2版本。</p><p>  開發(fā)環(huán)境:Eclipse SDK Versio

66、n:4.2.2。</p><p><b>  4 系統(tǒng)設(shè)計</b></p><p><b>  4.1 界面設(shè)計</b></p><p>  系統(tǒng)的界面設(shè)計要求界面統(tǒng)一,有統(tǒng)一的主題,且界面風(fēng)格簡單,具有良好的用戶友好性。增加按鈕而在界面上不顯突兀。</p><p>  在音樂播放時,通過歌曲信息的

67、獲取得到歌手信息,再從本地搜索歌手寫真,將音樂播放界面設(shè)置為歌手圖片。</p><p><b>  4.2 功能設(shè)計</b></p><p>  功能設(shè)計主要任務(wù)是能從手機(jī)本地自動搜索音樂文件,并在列表中顯示出來,點(diǎn)擊音樂列表項后實(shí)現(xiàn)音樂的后臺播放。</p><p>  4.2.1 音樂列表設(shè)計</p><p>  通過

68、在XML文件中增加listview控件,達(dá)到顯示音樂文件列表的目的。在每一項中顯示歌曲的名字和歌曲時長。同時在屏幕的最下方增加一個textview用來顯示當(dāng)前正在播放的音樂,當(dāng)前無音樂播放時,將此控件設(shè)置為不可見,音樂正在播放時,若列表界面重新被激活,則顯示正在播放的歌曲的名稱,并且用imageview來標(biāo)注播放狀態(tài)(暫停/播放)。點(diǎn)擊手機(jī)上的返回鍵,播放器會后臺運(yùn)行,歌曲播放不影響用戶使用其他應(yīng)用。當(dāng)用戶想徹底退出播放器時,點(diǎn)擊播放列

69、表右上的退出按鈕,點(diǎn)擊確定后退出音樂播放器。</p><p>  列表設(shè)計界面如圖4.1所示。</p><p>  圖4.1 播放列表設(shè)計界面</p><p>  4.2.2 音樂播放設(shè)計</p><p>  音樂播放時,在音樂播放界面,通過SeekBar控件來動態(tài)顯示音樂的播放進(jìn)度。同時,因為音樂播放主要應(yīng)用于后臺,不影響用戶去使用其他的應(yīng)

70、用,所以在音樂播放的設(shè)計時使用了android服務(wù)service。</p><p>  實(shí)現(xiàn)播放界面activity與播放實(shí)現(xiàn)service之間的實(shí)時通信,應(yīng)用Broadcast Receivers,通過action進(jìn)行消息信息的傳遞。</p><p>  同時,音樂播放時,可以實(shí)現(xiàn)對音樂播放的簡單控制:暫停/播放,上一曲/下一曲,通過對service發(fā)送不同的消息,service對不同的

71、消息進(jìn)行不同的處理,利用MediaPlayer已有的方法實(shí)現(xiàn)對音樂播放的控制。</p><p>  對音樂文件的控制方法有:</p><p>  setdataresource():設(shè)置要播放歌曲文件的路徑。</p><p>  prepare():準(zhǔn)備播放狀態(tài)。</p><p>  start():真正啟動音樂文件播放的方法。</p&

72、gt;<p>  pause():暫停音樂播放。</p><p>  stop():停止音樂播放。</p><p>  seekTo():定位方法,可以讓播放器從指定的位置開始播放音樂。</p><p>  release():可以釋放播放器占用的資源,一旦確定不再使用播放器時應(yīng)當(dāng)盡早調(diào)用它釋放資源。</p><p>  在用戶

73、點(diǎn)擊信息按鈕,進(jìn)入軟件信息界面。點(diǎn)擊播放模式按鈕,進(jìn)入設(shè)置音樂播放模式界面。點(diǎn)擊返回,回到音樂列表界面。</p><p>  音樂播放界面的設(shè)計如圖4.2所示。</p><p>  圖4.2 音樂播放設(shè)計界面</p><p>  4.2.3 音樂播放模式設(shè)計</p><p>  在當(dāng)前歌曲播放完成時,MediaPlayer的setOnComp

74、letionListener監(jiān)聽方法可以實(shí)現(xiàn)根據(jù)用戶選擇的播放模式自動找到下一首要播放歌曲的ID號,從而進(jìn)行播放。</p><p>  在本音樂播放器的設(shè)計中,有5種音樂播放模式:順序播放、單曲播放、隨機(jī)播放、單曲循環(huán)、列表循環(huán)播放。</p><p>  音樂模式activity中,用一個靜態(tài)變量model來表示當(dāng)前所選擇的音樂播放模式,當(dāng)監(jiān)聽控件狀態(tài)發(fā)生變化時,改變model的值。<

75、;/p><p>  點(diǎn)擊返回按鈕回到音樂播放界面。</p><p>  4.2.4 歌詞設(shè)計</p><p>  在音樂播放列表界面的XML文件中,加載一個自定的view控件,此控件用來顯示歌詞信息。</p><p>  音樂播放時會自動搜索此歌曲的LRC歌詞文件,若文件存在,則對歌詞文件進(jìn)行解析,每一句話對應(yīng)一個LrcContent對象,whi

76、le循環(huán),一次讀取一行并存入list數(shù)組中。當(dāng)歌曲進(jìn)行播放時,通過對時間的查找,找到處于當(dāng)前播放位置的那一句歌詞。將整個歌詞繪制到view上,同時對當(dāng)前的歌詞進(jìn)行字體大小和顏色的變化,使之突出顯示。</p><p><b>  5 系統(tǒng)實(shí)現(xiàn)</b></p><p>  5.1 音樂播放列表</p><p>  5.1.1 音樂列表界面</

77、p><p>  在當(dāng)前無音樂播放時,只是顯示音樂文件的列表,若音樂正在播放中,再次回到音樂列表界面時會顯示正在播放的音樂,點(diǎn)擊會進(jìn)入音樂播放界面,增加了與用戶的互動性,使交互性更加友好。</p><p>  在無音樂播放時和正在播放時的音樂列表界面如圖5.1所示。</p><p>  圖5.1 音樂列表在有無音樂播放時顯示界面</p><p> 

78、 5.1.2 獲取手機(jī)中歌曲文件信息</p><p>  Android系統(tǒng)提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套數(shù)據(jù)庫表格,通過Content Provider的方式提供給用戶。當(dāng)手機(jī)開機(jī)或者有SD卡插拔等事件發(fā)生時,系統(tǒng)將會自動掃描SD卡和手機(jī)內(nèi)存上的媒體文件,如audio,video,圖片等,將相應(yīng)的信息放到定義好的數(shù)據(jù)庫表格中,MediaSt

79、ore中定義了一系列的數(shù)據(jù)表格,通過ContentResolver提供的查詢接口,我們可以得到各種需要的信息。</p><p>  歌曲的名稱 :MediaStore.Audio.Media.TITL。</p><p>  歌曲的歌手名: MediaStore.Audio.Media.ARTIST。</p><p>  歌曲文件的全路徑 :MediaStore.Au

80、dio.Media.DATA。</p><p>  歌曲的總播放時長 :MediaStore.Audio.Media.DURATION。</p><p>  用while循環(huán)將音樂文件對象存入list數(shù)組中。</p><p>  讀取信息的關(guān)鍵代碼:</p><p>  ContentResolver cr = getApplication(

81、).getContentResolver();</p><p>  Cursor cursor = </p><p>  cr.query(MediaStore.Audio.Meida.EXTERNAL_CONTENT_URI,</p><p>  null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER

82、).</p><p>  if(cursor.moveToFirst())</p><p><b>  {</b></p><p><b>  do{</b></p><p>  Music m = new Music();</p><p>  String title

83、= //獲取歌曲的名字</p><p>  cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String name = //獲取歌曲作者的名字</p><p>  cursor.getString(cursor.getColumnIndex(

84、MediaStore.Audio.Media.ARTIST));</p><p>  int length = //獲取歌曲的長度(長度為ms)</p><p>  cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));</p><p>  String Url =

85、 //獲取歌曲的路徑</p><p>  cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));</p><p>  m.setTitle(title);</p><p>  m.setName(name);</p><p>  m.setLen

86、gth(length);</p><p>  m.setUrl(url);</p><p>  lists.add(m);</p><p>  } while (cursor.moveToNext());</p><p><b>  }</b></p><p>  5.1.3 在列表顯示界面中顯示

87、音樂</p><p>  頁面布局XML文件具體如下:</p><p>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"</p><p>  android:layout_width="match_parent"<

88、;/p><p>  android:layout_height="match_parent"</p><p>  android:background="@drawable/background" ></p><p>  <ListView//listView來顯示本地音樂</p><

89、;p>  android:id="@+id/listView1"</p><p>  android:layout_width="match_parent"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_

90、alignParentLeft="true"</p><p>  android:layout_alignParentTop="true" ></p><p>  </ListView></p><p>  <LinearLayout//用來顯示正在播放的音樂</p><

91、;p>  android:id="@+id/isruning"</p><p>  android:layout_width="fill_parent"</p><p>  android:layout_height="40dp"</p><p>  android:layout_alignParen

92、tBottom="true"</p><p>  android:layout_centerHorizontal="false"</p><p>  android:background="@drawable/isplayingback"</p><p>  android:gravity="ce

93、nter_horizontal" ></p><p>  <ImageView</p><p>  android:id="@+id/imageView1"</p><p>  android:layout_width="wrap_content"</p><p>  androi

94、d:layout_height="wrap_content"</p><p>  android:layout_gravity="center_horizontal"</p><p>  android:background="@drawable/play2" /></p><p><b>

95、  <TextView</b></p><p>  android:id="@+id/textView1"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"

96、;</p><p>  android:text="聽音樂"</p><p>  android:textAppearance="?android:attr/textAppearanceLarge" /></p><p>  </LinearLayout></p><p>  <

97、/RelativeLayout></p><p>  通過重寫B(tài)aseAdapter中的方法,將文件的信息通過ListView控件顯示出來。</p><p>  public class MusicListAdapter extends BaseAdapter{</p><p>  private Context context;</p><

98、;p>  private List<Music> listMusic;//Music對象數(shù)組</p><p>  public MusicListAdapter(Context context,List<Music> listMusic)</p><p><b>  {</b></p><p>  this.c

99、ontext=context;</p><p>  this.listMusic=listMusic;</p><p><b>  }</b></p><p>  public void setListItem(List<Music> listMusic){</p><p>  this.listMusic=

100、listMusic;</p><p><b>  }</b></p><p>  public int getCount() {</p><p>  return listMusic.size();</p><p><b>  }</b></p><p>  public O

101、bject getItem(int position) {</p><p>  return listMusic.get(position);</p><p><b>  }</b></p><p>  public long getItemId(int position) {</p><p>  return posi

102、tion;</p><p><b>  }</b></p><p>  public View getView(int position, View convertView, ViewGroup parent) {</p><p>  if(convertView==null){</p><p>  convertVie

103、w=LayoutInflater.from(context).inflate(R.layout.musicitem, null);</p><p><b>  }</b></p><p>  Music m = listMusic.get(position);</p><p>  TextViewmusic_title=</p&

104、gt;<p>  (TextView) convertView.findViewById(R.id.music_list_name);</p><p>  music_title.setText(m.getTitle());</p><p>  TextView music_time=</p><p>  (TextView) convertVie

105、w.findViewById(R.id.music_time);</p><p>  music_time.setText(toTime(m.getLength()));</p><p>  ImageView imageView = </p><p>  (ImageView) convertView.findViewById(R.id.item_image

106、);</p><p>  imageView.setBackgroundResource(R.drawable.item);</p><p>  return convertView;</p><p><b>  }</b></p><p><b>  }</b></p><p&

107、gt;  5.2 音樂播放和播放的service實(shí)現(xiàn)</p><p>  因為播放音樂的時候不像我們在玩游戲或其他應(yīng)用時需要一直停留在播放頁面,而是讓播放在后臺運(yùn)行,但是activity只支持在前臺運(yùn)行,所以需要service,使音樂在做其他事情的時候一直播放。</p><p>  5.2.1 音樂播放界面</p><p>  通過用戶在音樂列表點(diǎn)擊自己所要聽的音樂

108、,就回跳轉(zhuǎn)到音樂播放界面,音樂播放界面如圖5.2所示。</p><p>  圖5.2 音樂播放界面</p><p>  5.2.2 實(shí)現(xiàn)service后臺音樂播放</p><p><b> ?。?)音樂播放</b></p><p>  若用戶點(diǎn)擊的歌曲與正在播放的歌曲相同,則直接跳轉(zhuǎn)到播放界面,同時向service發(fā)送“

109、same”的消息,service收到后,不會做任何處理。</p><p>  若用戶點(diǎn)擊的歌曲與正在播放歌曲的不同,則將“startnewplay”封裝到intent中,當(dāng)service收到時,則釋放當(dāng)前的MediaPlayer,從新進(jìn)行初始化,進(jìn)行新的音樂的播放。</p><p><b>  主要代碼:</b></p><p>  prote

110、cted void onStart() {//音樂播放類的OnStart方法</p><p>  if(wantid != MusicService.c_id)</p><p><b>  {</b></p><p>  MusicService.c_id = wantid;</p><p>  Intent

111、intent = new Intent(MusicPlayActivity.this,MusicService.class);</p><p>  intent.putExtra("play", "startnewplay");</p><p>  intent.putExtra("id", wantid);</p>

112、<p>  startService(intent);</p><p>  isplaying = true;</p><p>  imageBtnPlay.setBackgroundResource(R.drawable.play);</p><p><b>  }</b></p><p>  else i

113、f(wantid == MusicService.c_id && wantid != -1){</p><p>  Intent intent = new Intent(MusicPlayActivity.this,MusicService.class);</p><p>  intent.putExtra("play", "same"

114、;);</p><p>  intent.putExtra("id", wantid);</p><p>  startService(intent);</p><p>  if(isplaying == false)</p><p><b>  {</b></p><p> 

115、 imageBtnPlay.setBackgroundResource(R.drawable.pause);</p><p><b>  }</b></p><p><b>  }</b></p><p>  super.onStart();</p><p><b>  }</b&g

116、t;</p><p>  (2)使用BroadcastReceiver進(jìn)度,時間和歌曲切換的變化</p><p>  使用BroadcastReceiver實(shí)現(xiàn)service和activity的信息傳輸交換,從而實(shí)現(xiàn)音樂進(jìn)度條和歌曲已播放時間的變化。當(dāng)用戶拖動進(jìn)度條,也能實(shí)現(xiàn)對音樂播放進(jìn)度的控制。</p><p>  在播放類中動態(tài)注冊兩個BroadcastRece

117、iver,一個用來實(shí)現(xiàn)對進(jìn)度條和已播放時間的變化,一個用來實(shí)現(xiàn)在歌曲播放完成時,根據(jù)播放模式選擇所選的下一首歌曲,將其信息顯示在播放界面中。</p><p>  receiver = new MyProBroadcastReceiver();//動態(tài)注冊兩個BroadcastReceiver</p><p>  IntentFilter filter = new IntentFilte

118、r("cn.com.yinyue.progress");</p><p>  this.registerReceiver(receiver, filter);</p><p>  receiver2 = new MyComBroadcastReceiver();</p><p>  IntentFilter filter2 = new Inten

119、tFilter("cn.com.yinyue.completion");</p><p>  this.registerReceiver(receiver2, filter2);</p><p>  在service中啟動一個線程,如果音樂正在播放,便每隔200ms就將現(xiàn)在的播放進(jìn)度發(fā)送給activity。</p><p>  public vo

溫馨提示

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

評論

0/150

提交評論