版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 河北農業(yè)大學</b></p><p><b> 本科畢業(yè)論文</b></p><p> 題 目: 基于Android的音樂播放器的設計與實現 </p><p> 學 院: 信息科學與技術學院 </p><p> 專業(yè)班級: 軟件工程1002班
2、 </p><p> 學 號: 2010234040714 </p><p> 學生姓名: 張帥 </p><p> 指導教師姓名: 陳晨 </p><p> 指導教師職稱: 講師 </p><p> 二O一四 年 六
3、 月 一 日</p><p><b> 摘 要</b></p><p> 當今社會的生活節(jié)奏越來越快,隨著移動硬件設備越來越先進,人們對移動設備的要求也越來越高,從以前的追求技術到現在的追求視覺效果,因此,也逐步提高了對系統(tǒng)的要求。本文主要是對Android系統(tǒng)上一的款音樂播放器應用程序的設計與實現進行討論。</p><p> Andr
4、oid平臺是Google公司推出的一個手機平臺,它是一個開源的系統(tǒng),它底層是基于Linux的操作系統(tǒng),本論文以Android開發(fā)平臺為基礎,首先介紹了安卓平臺的發(fā)展以及當前國內外的發(fā)展現狀。然后對安卓技術做了一個詳細介紹 ,之后對基于Android平臺的音樂播放器做了一個詳細的需求分析,在需求分析后詳細論述了音樂播放器的詳細設計。根據Android開發(fā)平臺自身的結構特點,把音樂播放器的開發(fā)分為兩個部分來進行分析和設計,一部分是
5、窗口的設計,住要是定義窗口的屬性和關聯窗口的處理函數;另一部分是功能的實現,主要是結合Android平臺提供的資源和對音樂播放器的功能分析最終實現定義的功能。</p><p> 關鍵詞:安卓;開源系統(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 對國內外現狀的研究1</p><p> 1.3 論文組織結構2</p><p> 2 安卓工程技術介紹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 安卓應用程序開發(fā)的核心技術5</p><p> 2.2.1 Android應用程序開發(fā)語言5</p><p> 2.2.2 Android應用程序組件5</p><p> 3 系統(tǒng)需求分析7</p><p> 3.1 軟件目標7</p><p> 3.2 軟
13、件可行性研究7</p><p> 3.2.1 經濟上的可行性7</p><p> 3.2.2 技術上的可行性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 運行環(huán)境11</p><p><b> 4 系統(tǒng)設計12</b></p><p> 4.1 界面設計12</p>
15、<p> 4.2 功能設計12</p><p> 4.2.1 音樂列表設計12</p><p> 4.2.2 音樂播放設計13</p><p> 4.2.3 音樂播放模式設計14</p><p> 4.2.4 歌詞設計14</p><p><b> 5 系統(tǒng)實現15<
16、;/b></p><p> 5.1 音樂播放列表15</p><p> 5.1.1 音樂列表界面15</p><p> 5.1.2 獲取手機中歌曲文件信息15</p><p> 5.1.3 在列表顯示界面中顯示音樂16</p><p> 5.2 音樂播放和播放的service實現18</
17、p><p> 5.2.1 音樂播放界面18</p><p> 5.2.2 實現service后臺音樂播放19</p><p> 5.3 音樂播放模式設置23</p><p> 5.3.1 播放模式設置界面23</p><p> 5.3.2 進行播放模式選擇24</p><p>
18、 5.4 歌詞處理和顯示25</p><p> 5.4.1 歌詞顯示模塊25</p><p> 5.4.2 歌詞解析模塊26</p><p><b> 6 總結29</b></p><p><b> 參考文獻30</b></p><p><b>
19、 致 謝31</b></p><p><b> 1 緒論</b></p><p> 1.1 項目目的及意義</p><p> 現今生活節(jié)湊快,生活緊張,在日常休息之余,欣賞音樂是最好的舒緩壓力的方式之一。本項目的目的就是開發(fā)一個可以對主流音樂文件格式有很好的支持的音樂播放器。</p><p> 隨著
20、計算機的廣泛運用,手機市場的迅速發(fā)展,各種音頻視頻資源也在網上廣為流傳,這些資源看似平常,但已經漸漸成為人們生活中必不可少的一部分了。于是各種手機播放器也緊跟著發(fā)展起來,但是很多播放器一味追求外觀花哨,功能龐大,對用戶的手機造成了很多資源浪費,比如CPU,內存等的占用率過高,在用戶需要多任務操作時,受到了不小的影響,帶來了許多不便,而對于大多數普通用戶,許多功能用不上,形同虛設。針對以上各種弊端,編寫一個簡潔,占用資源少,并能夠很好播放
21、本地音樂的播放器勢在必行。</p><p> 研究各種市場上流行的手機播放器,了解它們各自的插件及編碼方式,分析各種編碼的優(yōu)缺點以及各種播放器本身存在的缺陷和特點,編寫出功能實用,使用方便快捷的播放器。目前已經實現播放音樂文件的功能。擁有播放菜單,能選擇播放清單,具備一般播放器的功能。播放模式也比較完善,有單曲,順序,循環(huán),隨機播放等模式,給用戶一種輕松的體驗。</p><p> 1.
22、2 對國內外現狀的研究</p><p> 目前手機的音樂播放功能已經是大家比較關注的一個部分了,不少人在購買手機的時候都會關心手機的音樂播放的能力,這也足以看出目前大家對音樂播放功能的重視,所以一款性能良好的手機音樂播放器軟件一定會受到歡迎。和傳統(tǒng)的音樂播放器相比,手機播放音樂更加的容易攜帶,其他方面也都不輸于傳統(tǒng)音樂播放器所。 </p><p> 一款專業(yè)的音樂播放軟件是手
23、機中必不可少的要素,幾乎市場上所有的手機都擁有一個自帶的音樂播放軟件,通過軟件可以對音樂欣賞中一些必要的元素進行人性化的設置,同時在操作的時候也能得到一定的便利,但是不能滿足用戶的所有要求,所以就出現了各種各樣的手機音樂播放軟件,來滿足不同用戶的不同要求。不同手機平臺的手機,所支持的音樂播放軟件也是各不相同,而現在最流行的手機平臺就是Google的android手機平臺。 </p><p> 隨著科技
24、的快速發(fā)展,數碼電子設備基本上都含有MP3播放的功能。媒體播放器的發(fā)展有兩個趨勢。首先,支持多樣化格式,如常見的音頻格式WMA格式、MP3格式、MIDI格式等。這些格式如何能夠完美的播放,是現如今研究的一個主流方向。其次一個必要的趨勢就是播放器的可擴展性,現如今音樂播放器的功能越來越多,用戶體驗越來越好,如何能讓播放器的功能比現有的更加完備,也是占領用戶群的一個因素。由于Android基于Linux內核并且具有開源、免費的特性,為播放性
25、能的提升提供了更加便利的條件。Android平臺的開放性,可以不僅推動了技術創(chuàng)新(包括平臺本身),也有利于降低開發(fā)成本,制造商定制具有特點的產品也很容易。因此,它有一個大的市場潛力。</p><p> Android平臺是完全開放的平臺,智能手機里的各種應用軟件也越來越完備,在Android平臺設計和開發(fā)一款音樂播放器可以擺脫不夠智能音樂播放器的因素,并且具有很廣闊的前景。</p><p&g
26、t; 1.3 論文組織結構</p><p> 本文主要研究內容有以下幾個方面:</p><p> 第一章 緒論。主要是對項目的背景和意義進行簡要描述。</p><p> 第二章 安卓工程及技術介紹。對安卓及安卓技術相關等方面進行介紹。</p><p> 第三章 需求分析。對整個系統(tǒng)的可行性,功能需求和運行環(huán)境做出描述。</p&
27、gt;<p> 第四章 系統(tǒng)設計。對系統(tǒng)界面設計和功能設計做出描述。</p><p> 第五章 系統(tǒng)實現。對系統(tǒng)的實現國能做出描述,包括界面和代碼實現等。</p><p> 第六章 總結。簡要介紹程序的功能,自己的收獲和一些不足。</p><p> 2 安卓工程技術介紹</p><p> 2.1 android介紹&l
28、t;/p><p> Android是基于Linux內核的軟件平臺和操作系統(tǒng),早期由Google開發(fā)(在華注冊商標名為“安致”),后由開放手機聯盟(Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構,主要分為三部分。低層以Linux內核工作為基礎,只提供基本功能,其他的應用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術
29、,Google和其他幾十個手機公司建立開發(fā)手機聯盟。Android在未公開之前常被傳聞為Google電話或gPhone。大多傳聞認為Google開發(fā)的是自己的手機電話產品,而不是一套軟件平臺。到了2010年1月,Google開始發(fā)表自家品牌手機電話的Nexus One,截止到現在最新的手機型號為Nexus 5。</p><p> 2.1.1 Android Features特性</p><p
30、> 安卓系統(tǒng)有如下幾大特性:</p><p> 1.應用程序框架 支持組建的重用與替換。</p><p> 2.Dalvik 虛擬機 專門為移動設備做了優(yōu)化。</p><p> 3.內部集成瀏覽器 該瀏覽器基于開源的WebKit引擎。</p><p> 4.優(yōu)化的圖形庫 包括2D和3D圖形庫,3D圖形庫基于OpenGl ES。
31、</p><p> 5.SQLite 用作結構化的數據存儲。</p><p> 6.多媒體支持 包括常見的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)。</p><p> 7.GSM電話 (依賴于硬件)。</p><p> 8.藍牙Bluetooth,EDGE,3G,安定WI
32、FI(依賴于硬件)。</p><p> 9.照相機,GPS,指南針,和加速度計(依賴于硬件)。</p><p> 10.豐富的開發(fā)環(huán)境 包括設備模擬器,調試工具,內存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件。</p><p> 2.1.2 Android基本框架</p><p> Android基本框架如圖2.1所示。<
33、/p><p> 圖2.1 安卓基本框架</p><p> 其軟件層次結構自上而下分為以下幾個層次:</p><p> (1)應用程序(application)</p><p> Application Android會同一核心應用程序包一起發(fā)布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。所有
34、的應用程序都是用JAVA編寫的。</p><p> ?。?)應用程序框架(application framework)</p><p> 開發(fā)者完全可以訪問核心應用程序所使用的API框架。該應用程序架構用來簡化組件軟件的重用;任何一個應用程序都可以發(fā)布它的功能塊并且任何其他的應用程序都可以使用其所發(fā)布的功能塊(不過的遵循框架的安全性限制)。該應用程序重用機制使得組件可以被用戶替換。<
35、;/p><p> 所有的應用程序都由一系列的服務和系統(tǒng)組成,包括:</p><p> a.可擴展的視圖(Views)可以用來建應用程序,包括列表(Lists),網格(grids),文本框,按鈕,甚至可以嵌入一個web瀏覽器。</p><p> b.內容管理器(Content Providers)使得應用程序可以訪問另一個應用程序的數據,或者共享自己的數據。<
36、;/p><p> c.資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和分層文件(Layout Files)。</p><p> d.通知管理器(Notification Manager)使得應用程序可以在狀態(tài)欄中顯示客戶通知信息。e.活動類管理器(Activity Manager)用來管理應用程序的生命周期并提供常見的導航回退功能。</p&g
37、t;<p> (3)各種庫和安卓運行環(huán)境</p><p> Android包括一個被Android系統(tǒng)中各種不同組件所使用的C/C++庫集。該庫通過Android應用程序框架為開發(fā)者提供服務。</p><p> Android包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。</p><p> 每一個Android應用程序都在
38、它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik是針對于同時高效地運行多個VMS來實現的。Dalvik虛擬機執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對最小內存使用做了優(yōu)化。該虛擬機是基于寄存器的,所有的類都經由JAVA匯編器編譯,然后通過SDK中的dx工具轉化成.dex格式由虛擬機執(zhí)行。</p><p> Dalvik虛擬機依賴于linux的一些功能,比如線程機制和底層內存管理
39、機制。</p><p><b> ?。?)操作系統(tǒng)層</b></p><p> Android的核心系統(tǒng)服務依賴于Linux2.6內核,如安全性,內存管理,進程管理,網絡協(xié)議和驅動模型。Linux內核也同時作為硬件和軟件堆棧之間的硬件抽象層。</p><p> 2.2 安卓應用程序開發(fā)的核心技術</p><p>
40、2.2.1 Android應用程序開發(fā)語言</p><p> JAVA是Android上的主流開發(fā)語言,各種支持也最完善。Android發(fā)布的API和SDK也都主要是面向JAVA開發(fā)人員的。我的播放器實例也是用JAVA開發(fā)的。</p><p> 2.2.2 Android應用程序組件</p><p> Android 應用程序最大的一個特點就是每個應用都由若干
41、組件構成。而且各個應用程序的組件還可以相互調用(需要在代碼中設置相應權限)。例如假設我們需要編寫一個內嵌于網頁的程序,那么我們無需親自編寫瀏覽器,而是可以直接調用系統(tǒng)自帶的Chrome Lite瀏覽器組件。又如假設我們編寫了兩個應用程序,其中一個程序中有列表顯示圖標的組件,那么我們在另一個應用程序中就可以使用該組件,而不需要在編寫該功能。也就是說,不同于我們平常編寫的程序,Android的應用程序不是單一入口,而是可以從代碼的不同位置啟
42、動。這就要依靠組件來實現。</p><p> Android應用程序的組件有以下四種:</p><p><b> Activity</b></p><p> 一個Activity實際上表現出來的就是一個程序的界面。這個界面可能有許多不同的形式,比如有列表形式,有文字形式,有圖像格子等形式。一個應用程序也可能有不止一個Activity。比如
43、一耳光短消息的程序,需要有列表顯示所有消息的Activity,還至少需要一個編輯短信的Activity,還可能需要設置、菜單等界面。</p><p> 每個Activity都有一個默認的窗口用于繪制界面,一般情況下,它是充滿全屏的,但是我們可以通過程序控制它,使其小于屏幕大小,也可以控制其浮動于其他窗口之上(如Android中的Toast信息)。</p><p> Activity中顯
44、示出來的內容其實是由view堆疊形成的,view是由View基類派生出來的各種形式的界面元素,如ListView,GridView等等,通過組合這些view,就形成了一個可見的Activity。我們可以用Activity.setContentView()方法來設置一個Activity中所要顯示的view。</p><p> (2)Services</p><p> Service是一種
45、沒有界面的組件,同我們平常在Windows或Linux系統(tǒng)中所理解的“服務”一樣,Android上的service也是運行在后臺的,運行時間可以從系統(tǒng)啟動到系統(tǒng)關閉為止。對于許多應用程序來說,service組件式至關重要的。以下載管理器為例,用戶肯定希望能夠在切換到其他程序時仍然在后臺繼續(xù)下載,這就需要用到service完成下載工作。而顯示下載進度、已下載文件等信息則由Activity完成,同時我們還希望控制下載過程,如停止、繼續(xù)等,這
46、就需要Activity與service之間進行通信。Android允許activity連接到或者綁定到service上,這樣就可以讓用戶在界面上控制后臺service的行為。</p><p> ?。?)Broadcast Receivers</p><p> Broadcast意為廣播消息,Android系統(tǒng)自身會發(fā)出許多廣播消息,如電量不足,用戶修改了全局設置等,各個應用程序也以向整個
47、系統(tǒng)廣播消息,如文件下載。</p><p> Broadcast receiver則是程序中專門用來接收廣播消息的組件,它沒有界面顯示,只負責監(jiān)聽、接收廣播消息,然后根據程序邏輯,啟動其他組件去處理廣播消息。它可以啟動一個Activity來同用戶交互,也可以使用NotificationManager向用戶發(fā)出通知。NitificationManager的 通知形式有許多種,不如說振動、響鈴、閃LED燈,還可以在
48、Android界面的消息欄處顯示信息。</p><p> Content Providers</p><p> Content provider是一種為其它應用程序提供數據的組件。這些數據可以保存在文件中,也可以保存在SQLite數據庫中,還可以以其他任何有效的方式保存。ContentProvider類為我們提供了一系列保存數據的方法供我們調用,可以很方便地存儲數據。其它應用程序在需要
49、使用這些數據時,可以用ContentResolver對象,使用其中的方法。ContentResolver可以與任何contentprovider交互,獲取其中的數據。</p><p> 只需要某個組件,Android就會盡力保證它的可用;如果該組件還沒有啟動,就啟動它,如果該組件所屬的應用程序還沒擁有一個進程,則為它啟動一個進程,如果系統(tǒng)資源不足以容納一個新的進程,則將后臺的某個進程殺死為新進程騰出資源。<
50、;/p><p><b> 3 系統(tǒng)需求分析</b></p><p> 軟件需求分析工作是軟件生存期中重要的一步,也是決定性的一步。軟件需求分析是一個不斷認識和逐步細化的過程,該過程將軟件計劃階段所確定的軟件范圍逐步細化到可詳細定義的程度。需求分析還是軟件開發(fā)的基礎,假定在該階段發(fā)現一個錯誤,解決它需要用一小時的時間,到設計、編程、測試和維護階段解決,則要花幾倍甚至更多
51、的時間。因此對于復雜系統(tǒng)而言,首先要進行需求分析。開發(fā)人員應該對用戶的要求及現實環(huán)境進行調查和了解。</p><p><b> 3.1 軟件目標</b></p><p> 本系統(tǒng)屬于用戶常用的音樂播放器??梢苑奖阌脩羝綍r對音樂文件進行播放的操作。本系統(tǒng)應達到以下目標: </p><p> (1)軟件采用人機交互的方式,界面美觀友好,操作靈
52、活、富有個性化。</p><p> (2)能夠對當前播放音樂進行了解和控制。</p><p> (3)系統(tǒng)應最大限度地實現易維護性和易操作性。</p><p> 3.2 軟件可行性研究</p><p> 3.2.1 經濟上的可行性</p><p> Android基于Linux內核且具有開源、免費的特性,正式
53、由于Android擁有這一特性。它不僅推動了技術創(chuàng)新(包括平臺本身),也有利于降低開發(fā)成本。同時所需的軟件系統(tǒng)、硬件平臺等都是易于獲得的,且不需要android平臺的機器,用模擬器即可實現開發(fā)研究,開發(fā)成本低,容易實現,從經濟角度來看,該系統(tǒng)可行。</p><p> 3.2.2 技術上的可行性</p><p> 技術可行性要考慮現有的技術條件時候能夠順利完成開發(fā)工作,軟硬件配置時候滿足
54、開發(fā)的需求。本軟件用的是java開發(fā)語言,調試相對簡單,當前的計算機硬件配置也完全能滿足開發(fā)的需求。因此在技術上絕對可行的。軟件方面,相關的開發(fā)軟件,可以方便的從網上下載,易于獲得,且可以滿足系統(tǒng)需求。</p><p> 3.2.3 操作上的可行性</p><p> 該課題是利用自己的計算機,且使用Android模擬器,并且在本地上安裝JDK、Android跟Eclipse作為軟件的開
55、發(fā)平臺,使開發(fā)出來的系統(tǒng)有友好的用戶界面,操作簡單,因此在操作上是可行的。</p><p><b> 3.3 功能需求</b></p><p> 3.3.1 用例圖及用例描述</p><p> 功能需求定義了開發(fā)人員必須實現的軟件功能,使得用戶能完成他們的任務,從而滿足了用戶的業(yè)務需求。用戶需求文檔描述了用戶使用產品必須要完成的任務。針對
56、音樂播放器分別對音樂播放功能進行詳細的調研和分析,總結出用戶需求信息,其用例圖如圖3.1所示。</p><p> 圖3.1 音樂播放器用例圖</p><p> 音樂播放器用例描述如下:</p><p><b> 用例名稱:播放</b></p><p><b> 參與者:用戶</b></
57、p><p> 目標:使得用戶可以播放在播放列表中選中的歌曲</p><p> 前置條件:播放器正在運行</p><p> 基本事件流:1.用戶單擊音樂列表中的一項</p><p> 2.播放器將播放用戶所選中的歌曲</p><p><b> 用例名稱:暫停</b></p>&l
58、t;p><b> 參與者:用戶</b></p><p> 目標:使得用戶可以暫停正在播放的歌曲</p><p> 前置條件:播放器正在運行</p><p> 基本事件流:1.用戶單擊“暫?!卑粹o</p><p> 2.播放器將暫停當前播放的歌曲</p><p> 用例名稱:上一首
59、/下一首</p><p><b> 參與者:用戶</b></p><p> 目標:使得用戶可以聽上一首或下一首歌曲</p><p> 前置條件:歌曲正在播放或暫停</p><p> 基本事件流:1.用戶單擊“上一首或下一首”按鈕</p><p> 2.播放器將播放上一首或下一首歌曲<
60、;/p><p><b> 用例名稱:播放列表</b></p><p><b> 參與者:用戶</b></p><p> 目標:使得用戶可以進入播放清單</p><p> 前置條件:程序正在運行</p><p> 基本事件流:1.用戶由播放歌曲界面返回至清單界面</
61、p><p> 2.播放器進入播放列表</p><p><b> 用例名稱:歌詞顯示</b></p><p><b> 參與者:用戶</b></p><p> 目標:實現歌曲播放與歌詞同步</p><p> 前置條件:歌詞文件存在、程序運行在播放界面</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> 隨著手機的功能的不斷增加,音樂播放功能已經是時下各大手機廠商手機方案中的標配了??偨Y設計思路和對市場的調研,對音樂播放器作出以下詳細的定義:</p><p><b> (1)播放音樂文件</b><
64、/p><p> (2)播放音樂文件時實現暫停,播放。</p><p> (3)播放音樂文件時支持前一首或后一首音樂文件與當前音樂文件的切換。</p><p> (4)播放文件時支持進度條顯示并顯示已播放時間。</p><p> (5)可以設置播放模式。</p><p> (6)顯示手機上音樂文件列表。</p
65、><p> (7)支持歌詞文件同步。</p><p><b> 3.5 運行環(huán)境</b></p><p> 操作系統(tǒng):Android手機基于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)設計</b></p><p><b> 4.1 界面設計</b></p><p> 系統(tǒng)的界面設計要求界面統(tǒng)一,有統(tǒng)一的主題,且界面風格簡單,具有良好的用戶友好性。增加按鈕而在界面上不顯突兀。</p><p> 在音樂播放時,通過歌曲信息的
67、獲取得到歌手信息,再從本地搜索歌手寫真,將音樂播放界面設置為歌手圖片。</p><p><b> 4.2 功能設計</b></p><p> 功能設計主要任務是能從手機本地自動搜索音樂文件,并在列表中顯示出來,點擊音樂列表項后實現音樂的后臺播放。</p><p> 4.2.1 音樂列表設計</p><p> 通過
68、在XML文件中增加listview控件,達到顯示音樂文件列表的目的。在每一項中顯示歌曲的名字和歌曲時長。同時在屏幕的最下方增加一個textview用來顯示當前正在播放的音樂,當前無音樂播放時,將此控件設置為不可見,音樂正在播放時,若列表界面重新被激活,則顯示正在播放的歌曲的名稱,并且用imageview來標注播放狀態(tài)(暫停/播放)。點擊手機上的返回鍵,播放器會后臺運行,歌曲播放不影響用戶使用其他應用。當用戶想徹底退出播放器時,點擊播放列
69、表右上的退出按鈕,點擊確定后退出音樂播放器。</p><p> 列表設計界面如圖4.1所示。</p><p> 圖4.1 播放列表設計界面</p><p> 4.2.2 音樂播放設計</p><p> 音樂播放時,在音樂播放界面,通過SeekBar控件來動態(tài)顯示音樂的播放進度。同時,因為音樂播放主要應用于后臺,不影響用戶去使用其他的應
70、用,所以在音樂播放的設計時使用了android服務service。</p><p> 實現播放界面activity與播放實現service之間的實時通信,應用Broadcast Receivers,通過action進行消息信息的傳遞。</p><p> 同時,音樂播放時,可以實現對音樂播放的簡單控制:暫停/播放,上一曲/下一曲,通過對service發(fā)送不同的消息,service對不同的
71、消息進行不同的處理,利用MediaPlayer已有的方法實現對音樂播放的控制。</p><p> 對音樂文件的控制方法有:</p><p> setdataresource():設置要播放歌曲文件的路徑。</p><p> prepare():準備播放狀態(tài)。</p><p> start():真正啟動音樂文件播放的方法。</p&
72、gt;<p> pause():暫停音樂播放。</p><p> stop():停止音樂播放。</p><p> seekTo():定位方法,可以讓播放器從指定的位置開始播放音樂。</p><p> release():可以釋放播放器占用的資源,一旦確定不再使用播放器時應當盡早調用它釋放資源。</p><p> 在用戶
73、點擊信息按鈕,進入軟件信息界面。點擊播放模式按鈕,進入設置音樂播放模式界面。點擊返回,回到音樂列表界面。</p><p> 音樂播放界面的設計如圖4.2所示。</p><p> 圖4.2 音樂播放設計界面</p><p> 4.2.3 音樂播放模式設計</p><p> 在當前歌曲播放完成時,MediaPlayer的setOnComp
74、letionListener監(jiān)聽方法可以實現根據用戶選擇的播放模式自動找到下一首要播放歌曲的ID號,從而進行播放。</p><p> 在本音樂播放器的設計中,有5種音樂播放模式:順序播放、單曲播放、隨機播放、單曲循環(huán)、列表循環(huán)播放。</p><p> 音樂模式activity中,用一個靜態(tài)變量model來表示當前所選擇的音樂播放模式,當監(jiān)聽控件狀態(tài)發(fā)生變化時,改變model的值。<
75、;/p><p> 點擊返回按鈕回到音樂播放界面。</p><p> 4.2.4 歌詞設計</p><p> 在音樂播放列表界面的XML文件中,加載一個自定的view控件,此控件用來顯示歌詞信息。</p><p> 音樂播放時會自動搜索此歌曲的LRC歌詞文件,若文件存在,則對歌詞文件進行解析,每一句話對應一個LrcContent對象,whi
76、le循環(huán),一次讀取一行并存入list數組中。當歌曲進行播放時,通過對時間的查找,找到處于當前播放位置的那一句歌詞。將整個歌詞繪制到view上,同時對當前的歌詞進行字體大小和顏色的變化,使之突出顯示。</p><p><b> 5 系統(tǒng)實現</b></p><p> 5.1 音樂播放列表</p><p> 5.1.1 音樂列表界面</
77、p><p> 在當前無音樂播放時,只是顯示音樂文件的列表,若音樂正在播放中,再次回到音樂列表界面時會顯示正在播放的音樂,點擊會進入音樂播放界面,增加了與用戶的互動性,使交互性更加友好。</p><p> 在無音樂播放時和正在播放時的音樂列表界面如圖5.1所示。</p><p> 圖5.1 音樂列表在有無音樂播放時顯示界面</p><p>
78、 5.1.2 獲取手機中歌曲文件信息</p><p> Android系統(tǒng)提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套數據庫表格,通過Content Provider的方式提供給用戶。當手機開機或者有SD卡插拔等事件發(fā)生時,系統(tǒng)將會自動掃描SD卡和手機內存上的媒體文件,如audio,video,圖片等,將相應的信息放到定義好的數據庫表格中,MediaSt
79、ore中定義了一系列的數據表格,通過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數組中。</p><p> 讀取信息的關鍵代碼:</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對象數組</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實現</p><p> 因為播放音樂的時候不像我們在玩游戲或其他應用時需要一直停留在播放頁面,而是讓播放在后臺運行,但是activity只支持在前臺運行,所以需要service,使音樂在做其他事情的時候一直播放。</p><p> 5.2.1 音樂播放界面</p><p> 通過用戶在音樂列表點擊自己所要聽的音樂
108、,就回跳轉到音樂播放界面,音樂播放界面如圖5.2所示。</p><p> 圖5.2 音樂播放界面</p><p> 5.2.2 實現service后臺音樂播放</p><p><b> ?。?)音樂播放</b></p><p> 若用戶點擊的歌曲與正在播放的歌曲相同,則直接跳轉到播放界面,同時向service發(fā)送“
109、same”的消息,service收到后,不會做任何處理。</p><p> 若用戶點擊的歌曲與正在播放歌曲的不同,則將“startnewplay”封裝到intent中,當service收到時,則釋放當前的MediaPlayer,從新進行初始化,進行新的音樂的播放。</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> ?。?)使用BroadcastReceiver進度,時間和歌曲切換的變化</p><p> 使用BroadcastReceiver實現service和activity的信息傳輸交換,從而實現音樂進度條和歌曲已播放時間的變化。當用戶拖動進度條,也能實現對音樂播放進度的控制。</p><p> 在播放類中動態(tài)注冊兩個BroadcastRece
117、iver,一個用來實現對進度條和已播放時間的變化,一個用來實現在歌曲播放完成時,根據播放模式選擇所選的下一首歌曲,將其信息顯示在播放界面中。</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就將現在的播放進度發(fā)送給activity。</p><p> public vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android的音樂播放器的設計與實現
- 基于android系統(tǒng)的音樂播放器的設計與實現
- 基于 Android 的音樂播放器的設計與實現.pdf
- 基于android的音樂播放器的設計與實現2
- 基于Android的音樂播放器的設計與實現.pdf
- Android音樂播放器的設計與實現.pdf
- 基于Android的音樂播放器軟件的設計與實現.pdf
- android課程設計---基于android系統(tǒng)的音樂播放器設計與實現
- 基于android的音樂播放器的設計
- 基于android音樂播放器的設計與開發(fā)
- 基于Android的手機音樂播放器的設計與實現.pdf
- 基于 android 的音樂播放器的設計與實現(無源碼)
- 基于android的音樂播放器的設計
- 基于android系統(tǒng)的音樂播放器的實現
- 基于Android平臺的音樂播放器的設計與實現.pdf
- 畢業(yè)設計--基于android平臺的音樂播放器的設計與實現
- 基于android系統(tǒng)的音樂播放器的實現2
- 基于android平臺的音樂播放器設計與實現畢業(yè)論文
- 基于android的視頻播放器的設計與實現
- 基于android平臺的音樂播放器開發(fā)與設計
評論
0/150
提交評論