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

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(論文)</b></p><p>  標 題: 基于Android的音樂播放器 </p><p>  學(xué)生姓名: </p><p>  系 部: 電子信息系 </p><p>  專

2、業(yè): 軟件技術(shù) </p><p>  班 級: </p><p>  指導(dǎo)教師: </p><p><b>  摘 要</b></p><p>  當(dāng)今社會的生活節(jié)奏

3、越來越快+Android系統(tǒng)上一的款音樂播放器應(yīng)用程序的設(shè)計與實現(xiàn)進行討論。Android是一個開源的系統(tǒng),它底層是基于Linux的操作系統(tǒng),本論文的音樂播放器采用了Android開源系統(tǒng)技術(shù),利用Java語言和Eclipse編輯工具對播放器進行編寫。同時給出了詳細的系統(tǒng)設(shè)計過程、部分界面圖及主要功能運行流程圖,本文還對高度過程中遇到的問題和解決方法進行了詳細的討論,該音樂播放器集播放、暫停、停止、上一首、下一首、音量調(diào)節(jié)、歌詞顯示等功

4、能于一體,性能良好,在Android系統(tǒng)中能獨立運行。該播放器還擁有對手機文件瀏覽器的訪問功能、歌曲播放模式、以及歌詞開閉狀態(tài)的友好設(shè)置.MP3的全名是MPEG Audio Layer-3,是一種聲音文件的壓縮格式,由于本播放器只限于應(yīng)用層程序的探討,所以對具體的壓縮算法不作深究。</p><p>  關(guān)鍵詞:Android ; 開源系統(tǒng) ; Eclipse ; 音樂播放器</p><p>

5、;<b>  1系統(tǒng)需求分析</b></p><p><b>  1.1功能需求</b></p><p>  1.1.1播放器的基本控制需求</p><p>  根據(jù)項目的目標,我們可獲得項目系統(tǒng)的基本需求,一下從不同的角度來描述系統(tǒng)的需求,并且使用用例圖來描述,系統(tǒng)的功能需求,我們分成四部分來概括,即播放器的基本控制需要

6、,播放列表管理需求,播放器友好性需求和播放器擴展卡需求。</p><p>  圖1.1 播放器基本控制圖</p><p>  在播放器正在運行時,用戶單擊“播放”按鈕,播放器將播放選中的播放列表中的音樂,并同時顯示當(dāng)前進度;當(dāng)歌曲未暫?;蛲V箷r,用戶單擊“暫停”按鈕,播放器將進入暫停狀態(tài);播放器正在播放或暫停時,用戶單擊“停止”按鈕,播放器將停止播放或暫停時,用戶點擊“上一首”或者“下一首

7、”按鈕,播放器將播放上一首或下一首歌曲。</p><p>  1.1.2功能需求(時序圖)分析</p><p>  從時序圖中可以看出播放器中信息發(fā)送和調(diào)用過程</p><p>  圖1.2 音樂播放器的時序圖</p><p>  1.2 系統(tǒng)結(jié)構(gòu)圖和流程圖</p><p>  圖1.3 音樂播放器系統(tǒng)流程圖</

8、p><p><b>  1.3系統(tǒng)界面需求</b></p><p>  播放器界面要求布局合理,簡約,顏色舒適,控制按鈕友好,能讓用戶一眼就能看出各個按鈕的作用及操作方法。能實現(xiàn)要求的功能,但又不重復(fù)。要考慮到不同手機屏幕大小可能不一樣,應(yīng)盡量兼容大多數(shù)手機屏幕尺寸,使之顯示無障礙。</p><p><b>  1.4系統(tǒng)性能需求<

9、/b></p><p>  根據(jù)Android手機系統(tǒng)要求無響應(yīng)時間為5秒,所以就有如下性能要求:</p><p>  當(dāng)要求歌曲播放時,程序響應(yīng)時間最長不能超過5秒</p><p>  當(dāng)要求歌曲暫停時,程序響應(yīng)時間最長不能超過5秒</p><p>  當(dāng)要求歌曲停止時,程序響應(yīng)時間最長不能超過5秒</p><p&

10、gt;  當(dāng)要求歌曲上/下一首時,程序響應(yīng)時間最長不能超過5秒</p><p>  界面切換響應(yīng)時間最長不能超過3秒</p><p><b>  1.5運行環(huán)境需求</b></p><p>  操作系統(tǒng):Windows xp</p><p>  支持環(huán)境:Android 2.1版本</p><p>

11、;  開發(fā)環(huán)境:Eclipse 3.5 ADT 0.95</p><p>  2 Android項目介紹</p><p>  2.1什么是Android</p><p>  2.1.1Android的介紹</p><p>  Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作

12、系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。</p><p>  Android是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā)(在華注冊商標名為“安致”),后由開放手機聯(lián)盟(Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux

13、內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術(shù),Google和其他幾十個手機公司建立開發(fā)手機聯(lián)盟。Android在未公開之前常被傳聞為Google電話或gPhone。大多傳聞?wù)J為Google開發(fā)的是自己的手機電話產(chǎn)品,而不是一套軟件平臺。到了2010年1月,Google開始發(fā)表自家品牌手機電話的Nexus One。</p><p>  2.1

14、.2 Android Features 特性:</p><p>  Android 系統(tǒng)有如下的幾大特性</p><p>  應(yīng)用程序框架 支持組建的重用與替換</p><p>  Dalvik 虛擬機 專門為移動設(shè)備做了優(yōu)化</p><p>  內(nèi)部集成瀏覽器 該瀏覽器基于開源的WebKit引擎</p><p>  

15、優(yōu)化的圖形庫 包括2D和3D圖形庫,3D圖形庫基于OpenGl ES</p><p>  SQLite 用作結(jié)構(gòu)化的數(shù)據(jù)存儲</p><p>  多媒體支持 包括常見的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)</p><p>  GSM電話 (依賴于硬件)</p><p>  藍

16、牙Bluetooth,EDGE,3G,安定WIFI(依賴于硬件)</p><p>  照相機,GPS,指南針,和加速度計(依賴于硬件)</p><p>  豐富的開發(fā)環(huán)境 包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件</p><p>  2.1.3 Android 基本框架(Android Architecture)</p&g

17、t;<p>  圖2. 1Android Architecture(android 軟件結(jié)構(gòu)圖)</p><p>  其軟件層次結(jié)構(gòu)自上而下分為以下幾個層次</p><p>  應(yīng)用程序(Application)</p><p>  應(yīng)用程序框架(Application Framework)</p><p>  各種庫(Libr

18、aries)和Android運行環(huán)境(RunTime)</p><p><b>  操作系統(tǒng)層</b></p><p>  Application</p><p>  Application Android 會同一核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是

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

20、  所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:</p><p>  可擴展的視圖(Views)可以用來建應(yīng)用程序,包括列表(lists),網(wǎng)格(Grids),文本框(Text boxes),按鈕(button),甚至包括另一個可嵌入的web瀏覽器。</p><p>  內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人的數(shù)據(jù)庫),或者共

21、享它們自己的數(shù)據(jù)。</p><p>  資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和分層文件(Layout Files)。</p><p>  通知管理器(Notification Manager)使得應(yīng)用程序生可以在狀態(tài)欄中顯示客戶通知信息。</p><p>  活動類管理器(Activity Manager)用來管理

22、應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。</p><p>  Libraries庫</p><p>  Android包括一個被Android系統(tǒng)中各種不同組件所使用的C/C++庫集。該庫通過Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。</p><p>  Android Runtime</p><p>  Android包括了一個核心庫,

23、該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。 每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik是針對于同時高效地運行多個VMS來實現(xiàn)的。Dalvik虛擬機執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對最小內(nèi)存使用做了優(yōu)化。該虛擬機是基于寄存器的,所有的類都經(jīng)由JAVA匯編器編譯,然后通過SDK中的dx工具轉(zhuǎn)化成.dex格式由虛擬機執(zhí)行。 Dalvik虛擬機依賴于

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

25、的核心技術(shù)</p><p>  2.2.1 Android 應(yīng)用開發(fā)語言</p><p>  JAVA是Android上的主流開發(fā)語言,各種支持也最完善。Android發(fā)布的API和SDK也都主要是面向JAVA開發(fā)人員的。我的播放器實例也是用JAVA開發(fā)的。</p><p>  2.2.2 Android 應(yīng)用程序組件</p><p>  A

26、ndroid 應(yīng)用程序最大的一個特點就是每個應(yīng)用都由若干組件構(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)用程序,其中一個程序中有列表顯示圖標的組件,那么我們在另一個應(yīng)用程序中就可以使用該組件,而不需要在編寫該功能。也就是說,不同于我們平常編寫的程序,Andr

27、oid的應(yīng)用程序不是單一入口,而是可以從代碼的不同位置啟動。這就要依靠組件來實現(xiàn)。</p><p>  Android應(yīng)用程序的組件有以下四種:</p><p><b>  Activity</b></p><p>  一個Activity實際上表現(xiàn)出來的就是一個程序的界面。這個界面可能有許多不同的形式,比如有列表形式,有文字形式,有圖像格子等

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

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

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

31、下載文件等信息則由Activity完成,同時我們還希望控制下載過程,如停止、繼續(xù)等,這就需要Activity與service之間進行通信。Android允許activity連接到或者綁定到service上,這樣就可以讓用戶在界面上控制后臺service的行為。</p><p>  Broadcast receiver</p><p>  Broadcast意為廣播消息,Android系統(tǒng)自

32、身會發(fā)出許多廣播消息,如電量不足,用戶修改了全局設(shè)置等,各個應(yīng)用程序也以向整個系統(tǒng)廣播消息,如文件下載。</p><p>  Broadcast receiver則是程序中專門用來接收廣播消息的組件,它沒有界面顯示,只負責(zé)監(jiān)聽、接收廣播消息,然后根據(jù)程序邏輯,啟動其他組件去處理廣播消息。它可以啟動一個Activity來同用戶交互,也可以使用NotificationManager向用戶發(fā)出通知。Nitificati

33、onManager的 通知形式有許多種,不如說振動、響鈴、閃LED燈,還可以在Android界面的消息欄處顯示信息。</p><p>  Content providers</p><p>  Content provider是一種為其它應(yīng)用程序提供數(shù)據(jù)的組件。這些數(shù)據(jù)可以保存在文件中,也可以保存在SQLite數(shù)據(jù)庫中,還可以以其他任何有效的方式保存。ContentProvider類為我們

34、提供了一系列保存數(shù)據(jù)的方法供我們調(diào)用,可以很方便地存儲數(shù)據(jù)。其它應(yīng)用程序在需要使用這些數(shù)據(jù)時,可以用ContentResolver對象,使用其中的方法。ContentResolver可以與任何contentprovider交互,獲取其中的數(shù)據(jù)。</p><p>  只需要某個組件,Android就會盡力保證它的可用;如果該組件還沒有啟動,就啟動它,如果該組件所屬的應(yīng)用程序還沒擁有一個進程,則為它啟動一個進程,如果

35、系統(tǒng)資源不足以容納一個新的進程,則將后臺的某個進程殺死為新進程騰出資源。</p><p>  2.3 Android開發(fā)環(huán)境的搭配</p><p>  任何事物要運行,都要有它的環(huán)境,Android也有它的環(huán)境才能夠運行,下面介紹Android的開發(fā)環(huán)境配置.</p><p>  搭建開發(fā)環(huán)境需要的軟件:</p><p>  操作系統(tǒng):Win

36、dows XP或Linux</p><p>  軟件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Develoopment Tool)</p><p>  IDE環(huán)境:Eclipse IDE+ADT Eclipse3.3以上</p><p>  JDK:Java R

37、untime Environment虛擬機 、(JDK)Java Development kit</p><p><b>  安裝步驟如下:</b></p><p>  第一步:安裝Java虛擬機sun-java6-jdk版本</p><p>  第二步:安裝Eclipse3.5工具 官網(wǎng)http://www.eclipse.org/downl

38、oads/</p><p>  選擇版本(圖4.2):進行安裝</p><p><b>  圖 2.2 </b></p><p>  第三步:安裝Android SDK:首先要下載SDK,可以在這個網(wǎng)址下載Http://developer.android.com/sdk ,選擇相應(yīng)的系統(tǒng)進行安裝</p><p><

39、;b>  圖 2.3 </b></p><p>  第四步:安裝Android ADT插件</p><p>  運行Eclipse,選擇help->install new software 選擇add,將會彈出一個框</p><p><b>  圖 2.4 </b></p><p>  點擊O

40、K,選擇要安裝的軟件,占next,然后選擇接受協(xié)議,直到安裝成功,重啟Eclipse軟件,設(shè)置Android SDK Home,Window->refrence</p><p><b>  圖 2.5 </b></p><p>  在SDK location中輸入SDK Tools路徑:D:\android software\android-sdk-windo

41、ws 點擊OK</p><p>  這樣Android環(huán)境就已經(jīng)搭建成功了。</p><p>  2.4 Android模擬器中sd卡的創(chuàng)建和文件的上傳</p><p>  在Android模擬器中,初始時沒有sdcard的,為了存放音樂文件,需要自己創(chuàng)建sdcard,我們先來看看如何創(chuàng)建sdcard以及文件上傳。</p><p>  2.4

42、.1 SD卡的創(chuàng)建</p><p>  通過Android的Tools來創(chuàng)建sd卡并導(dǎo)入進來</p><p>  打開dos,windows+R鍵打開。轉(zhuǎn)換到你的sdk安裝包的tools目錄下,如我的目錄如下:E:\android-sdk-windows\tools </p><p>  創(chuàng)建sd卡。在命令行中輸入:mksdcard 1024M E:\androi

43、dsdcard\sdcard.img</p><p> ?。ㄟ@個1024M就是我們要創(chuàng)建的SD卡的大小,還是根據(jù)自己的需要來輸入,最后面的那個E:\androidsdcard\sdcard.img就是所設(shè)置的SD存放路徑,這里也可以根據(jù)我們自己的需要改變路徑的,但要注意路徑中不能有空格出現(xiàn))</p><p>  在Eclipse里面創(chuàng)建模擬器,并以該SD開來創(chuàng)建</p>&l

44、t;p>  創(chuàng)建完成之后,啟動該模擬器??梢栽贏ndroid SDK and AVD Manager 里面指定模擬器并啟動。</p><p>  同樣打開Eclipse的DDMS-File—Explorer 查看sd卡是否安裝成功。</p><p>  2.4.2向sd卡里面上傳文件及異常解決</p><p>  右邊兩個小手機按鈕就是傳輸文件的按鈕了,用它

45、來實現(xiàn)文件的傳入和傳出了,向左的表示把手機里的文件導(dǎo)出,向右的表示把文件導(dǎo)入到手機里面去。這里和容易出現(xiàn)異常。異常如下:</p><p>  異常一:Failed to push selection:Invalid argument</p><p>  出現(xiàn)此異常,多半是文件所在的目錄里面有中文或者文件的名字是中文導(dǎo)致的。</p><p>  建議修改一下試試。還有

46、就是觀察自己的操作權(quán)限是不是不夠,如果是,d—rwxr—x 那就是可以的。如果,sd卡是在eclipse里面系統(tǒng)自動創(chuàng)建的,試著重啟一下IDE。</p><p>  異常二:Failed to push the item(s)</p><p>  出現(xiàn)這個異常是因為傳輸超時造成的。可以修改。</p><p>  打開windows—Preference—androi

47、d—DDMS</p><p>  把ADB connection tine out 項的超時時間改大點。</p><p>  3音樂播放器的詳細設(shè)計</p><p>  3.1 播放器主界面的設(shè)計和說明</p><p>  Android的每一個可視化界面,都有其唯一的布局配置文件,該文件里面有各種布局方式,各種資源文件如圖像,文字,顏色的引

48、用,程序在運行時,可以通過代碼對配置文件進行讀取。這樣就可以形成不同的可視化界面和絢麗的效果。</p><p>  主界面布局文件內(nèi)容如下:</p><p>  <?xml version="1.0" encoding="utf-8"?></p><p>  <AbsoluteLayout xmlns:and

49、roid="http://schemas.android.com/apk/res/android"</p><p>  android:id="@+id/AbsoluteLayout01"</p><p>  android:layout_width="wrap_content"</p><p>  and

50、roid:layout_height="fill_parent"</p><p>  android:background="@drawable/backgrund"</p><p>  android:sharedUserId="com.android.activitygrouptest"</p><p>

51、;<b>  ></b></p><p>  此處的ListView作用為列出歌曲</p><p>  <ListView </p><p>  android:id="@id/android:list" </p><p>  android:layout_width="fill

52、_parent" </p><p>  android:layout_height="fill_parent" </p><p>  android:layout_weight="1" </p><p>  android:drawSelectorOnTop="false"/></p

53、><p>  <LinearLayout</p><p>  android:layout_width="fill_parent"</p><p>  android:layout_height="wrap_content"</p><p>  android:gravity="center

54、"</p><p>  android:orientation="horizontal" ></p><p>  此處的ImageButton用于第一曲</p><p>  <ImageButton</p><p>  android:id="@+id/music_lasted"&

55、lt;/p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_marginRight="5dp"</p><p&g

56、t;  android:src="@drawable/latest1" /></p><p>  此處的ImageButton用于上一曲</p><p>  <ImageButton</p><p>  android:id="@+id/music_rewind"</p><p>  and

57、roid:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_marginRight="5dp"</p><p>  android:src="@dr

58、awable/rewind" /></p><p>  此處的ImageButton用于播放與暫停</p><p>  <ImageButton</p><p>  android:id="@+id/music_play"</p><p>  android:layout_width="wr

59、ap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_marginRight="5dp"</p><p>  android:src="@drawable/play1" />&l

60、t;/p><p>  此處的ImageButton用于下一曲</p><p>  <ImageButton</p><p>  android:id="@+id/music_foward"</p><p>  android:layout_width="wrap_content"</p>

61、<p>  android:layout_height="wrap_content"</p><p>  android:layout_marginRight="5dp"</p><p>  android:src="@drawable/foward" /></p><p>  此處的Im

62、ageButton用于最后一曲</p><p>  <ImageButton</p><p>  android:id="@+id/music_next"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_

63、height="wrap_content"</p><p>  android:src="@drawable/next1" /></p><p>  </LinearLayout></p><p><b>  主界面為:</b></p><p>  3.2 And

64、roid媒體播放原理</p><p>  Android源程序已經(jīng)為我們封裝了一個接口類,叫MediaPlayer。該接口在執(zhí)行前需要一個數(shù)據(jù)源,通過如下四個步驟:</p><p>  第一步:MediaPlayer.reset(); 復(fù)位操作,為以后的媒體準備播放做準備。</p><p>  第二步:傳入歌曲數(shù)據(jù)源,這里也是一個數(shù)據(jù)源:MediaPlayer.se

65、tDataSource(String path);參數(shù)需要一個路徑,該接口類在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。</p><p>  第三步:準備播放數(shù)據(jù)源,調(diào)用MediaPlayer.prepare();</p><p>  第四步:MediaPlayer.start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再于程序有關(guān),需要調(diào)用MediaPlayer.stop()方法讓其停止或MediaPlaye

66、r.start();讓其啟動。</p><p>  3.3 播放功能實現(xiàn)細節(jié)</p><p>  為了實現(xiàn)音樂播放器的基本功能:音樂播放、暫停、停止、上一首、下一首。這里我用事件監(jiān)聽,詳細如下:</p><p>  3.3.1 播放器播放、暫停、停止等功能</p><p><b>  圖 3.3.1</b></p&

67、gt;<p>  如圖5.4所示:各按鈕水平放置,用的是布局中的線性布局LinearLayout,用方法setOrientation(horizontal);將其設(shè)置為水平。LinearLayout中依次放置第一曲、上一曲、播放與暫停、下一曲、最后一曲按鈕屬性。配置文件代碼結(jié)構(gòu)如下:</p><p>  <LinearLayout></p><p>  <I

68、mageButton ></ImageButton></p><p>  <ImageButton ></ImageButton></p><p>  <ImageButton ></ImageButton></p><p>  <ImageButton ></ImageButton

69、></p><p>  <ImageButton ></ImageButton></p><p>  </LinearLayout></p><p>  android的媒體播放原理:android源程序已經(jīng)為我們封裝好了一個接口類,叫MediaPlayer。該接口在執(zhí)行行需要一個數(shù)據(jù)源,通過如下四個步驟:</p>

70、;<p>  第一步:MediaPlayer.reset();復(fù)位操作,為以后的媒體準備播放作準備。 </p><p>  第二步:傳入歌曲數(shù)據(jù)源,這里也是一個數(shù)據(jù)流 MediaPlayer.setDataSource(String path);參數(shù)需要傳一個路徑,該接口類在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。</p><p>  第三步:準備播放

71、數(shù)據(jù)源,調(diào)用方法MediaPlayer.Prepare();</p><p>  第四步:MediaPlayer.Start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再與程序 有關(guān),需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start();讓其啟動;</p><p>  歌曲數(shù)據(jù)源的獲得:要獲得數(shù)據(jù)源,需要我們提供給接口類一個歌曲存放路徑,而這個路徑已經(jīng)被事

72、先放到數(shù)據(jù)庫里了,我們只需要進行數(shù)據(jù)庫進行操作。將里面的路徑取出。這里將調(diào)用PlayRackActivity的一個方法query();代碼算法如下:</p><p>  public String query() {</p><p>  ContentResolver cr = getContentResolver();</p><p>  Uri uri =

73、DBProvider.CONTENT_URI;</p><p>  String[] projection = { "path" };</p><p>  String selection = "fileName=?";</p><p>  String[] selectionArgs = { selectName };<

74、;/p><p>  Cursor c=cr.query(uri,projection,selection, selectionArgs, null);</p><p>  if (c.moveToFirst()) {</p><p>  String path = c.getString(0);</p><p>  return pa

75、th;</p><p>  }return null;</p><p><b>  }</b></p><p>  方法getContentResolver是包android.content.ContextWrapper里面的方法,它會自動的調(diào)用ContentProvider中的關(guān)聯(lián)數(shù)據(jù)庫,我們需用這個方法就可以操作數(shù)據(jù)庫。數(shù)據(jù)庫操作需要一個U

76、ri 。Uri類似一個網(wǎng)絡(luò)連接的Url。Uri是數(shù)據(jù)庫唯一的標識,不同的Uri可以操作不同的數(shù)據(jù)庫表。在查詢數(shù)據(jù)庫時需要傳入一個當(dāng)前播放的歌曲名字,通過歌曲名字來查詢歌曲的路徑。</p><p>  4 Android數(shù)據(jù)庫設(shè)計</p><p>  數(shù)據(jù)結(jié)構(gòu)組織和數(shù)據(jù)庫文件設(shè)計要根據(jù)不同用途,使用要求等,來決定數(shù)據(jù)的整體組織形式等一系列問題。</p><p>  數(shù)

77、據(jù)庫,顧名思義,是存放數(shù)據(jù)的倉庫。只不過這個倉庫是在計算機存儲設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的。數(shù)據(jù)庫中的數(shù)據(jù)按一定數(shù)據(jù)模型組織、描述和存儲,具有較小的重復(fù)度、較高的數(shù)據(jù)獨立性和易擴展性,并且可以被在一定范圍內(nèi)的各種用戶共享。在涉及數(shù)據(jù)庫的軟件開發(fā)中,需要根據(jù)有待解決的問題性質(zhì)、規(guī)模,以及所采用的前端程序創(chuàng)建工具等,做出合適的數(shù)據(jù)庫類型選擇</p><p>  4.1 數(shù)據(jù)庫及字段屬性設(shè)計</p>

78、<p>  4.1.1 字段設(shè)計(表、圖)</p><p>  file_table 主要是保存歌曲名字、類型、路徑</p><p>  字段說明:Id 歌曲id號 fileName 歌曲名字 filePath 歌曲路徑 sort 歌曲類型(表4.1、圖4.1.1)</p><p>  Android自帶一個MediaStore封閉類 專門來存儲媒體

79、信息</p><p>  通過Uri EXTERNAL_CONTENT_URI 來訪問SDcard中的歌曲詳細信息。</p><p>  存放媒體信息如TITLE(標題)、ARTIST(藝術(shù)家)、ALBUM(專輯)、SIZE(大小 )(表4.2、圖4.1.2)</p><p><b>  表4.1</b></p><p>

80、;<b>  表4.2</b></p><p>  圖4.1.1 歌曲列表</p><p>  圖4.1.2 歌曲詳細</p><p>  4.1.2 音樂播放器E-R圖</p><p>  音樂播放器 E-R(實體-聯(lián)系:entity-relation圖)圖(圖4.1.3)</p><p>  

81、圖4.1.3 E-R圖</p><p><b>  4.2 數(shù)據(jù)庫連接</b></p><p>  這里將介紹如何進行Android數(shù)據(jù)庫連接,Android中自帶SQLite數(shù)據(jù)庫,這是一個十分小型的數(shù)據(jù)庫,這樣正適合Android這種移動平臺使用。</p><p>  Android數(shù)據(jù)庫存儲的位置在data/data/<項目文件夾

82、>/databases/目錄下 Android是利用ContentProvider作為內(nèi)容提供商,SQLiteOpenHelper數(shù)據(jù)庫幫助類來進行對數(shù)據(jù)庫的創(chuàng)建和操作。通過Context.getContentResolver()方法直接對數(shù)據(jù)庫進行操作。程序中數(shù)據(jù)庫類為DBHelper extends SQLiteOpenHelper(繼承關(guān)系),內(nèi)容提供類DBProvider extends ContentProvid

83、er(繼承關(guān)系)</p><p>  4.2.1 創(chuàng)建數(shù)據(jù)庫</p><p>  Android 提供了標準的數(shù)據(jù)庫創(chuàng)建方式。繼承SQLiteOpenHelper ,實現(xiàn)onCreate 和 onUpgrade 兩個方法,有個好處就是便于數(shù)據(jù)庫版本的升級,連接數(shù)據(jù)庫的算法如下:</p><p>  public DBHelper(Context context) {

84、// 創(chuàng)建數(shù)據(jù)庫</p><p>  super(context, DATABASE_NAME,null, DATABASE_VERSION);</p><p><b>  }</b></p><p>  public void onCreate(SQLiteDatabase db) {// 創(chuàng)建時調(diào)用</p><p>

85、  db.execSQL(DATABASE_CREATE);</p><p><b>  }</b></p><p>  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 版本更新時調(diào)用</p><p>  db.execSQL(&qu

86、ot;DROP TABLE IF EXISTS File_Table");</p><p>  onCreate(db);</p><p><b>  }</b></p><p>  @Override // 在ContextProvider運行時自動創(chuàng)建數(shù)據(jù)庫 </p><p>  public b

87、oolean onCreate() {</p><p>  dbOpenHelper= new DBHelper(getContext());</p><p>  return true;</p><p><b>  }</b></p><p>  數(shù)據(jù)庫如果創(chuàng)建不成功則拋出FIleNotFoundException異常

88、</p><p>  4.2.2 操作數(shù)據(jù)庫</p><p>  Android對數(shù)據(jù)庫的操作主要有插入、刪除、更新、查詢操作,在進行任何操作時都必須指定一個Uri,才能對相應(yīng)的表進行數(shù)據(jù)操作。</p><p><b>  //數(shù)據(jù)庫刪除操作</b></p><p><b>  @Override</b&

89、gt;</p><p>  public int delete(Uri arg0, String arg1, String[] arg2) {</p><p>  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();</p><p><b>  try {</b></p>

90、<p>  Db.delete(FileColumn.TABLE, arg1, arg2);</p><p>  } catch (Exception ex) {</p><p>  ex.printStackTrace();</p><p>  }return 1;</p><p><b>  }</b>&l

91、t;/p><p>  @Override//數(shù)據(jù)庫插入操作</p><p>  public Uri insert(Uri uri, ContentValues values) {</p><p>  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();</p><p>  long co

92、unt = 0;</p><p>  try { count = db.insert(FileColumn.TABLE, null, values);</p><p>  } catch (Exception ex) </p><p>  { ex.printStackTrace(); }</p><p>  if (count > 0

93、) return uri;</p><p>  else return null;</p><p><b>  }</b></p><p>  // 數(shù)據(jù)庫更新操作</p><p><b>  @Override</b></p><p>  public int update

94、(Uri uri, ContentValues values, String selection,String[] selectionArgs) {</p><p>  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();</p><p>  int i = 0;</p><p><b>  try

95、 {</b></p><p>  i = db.update(FileColumn.TABLE, values, selection, null);return i;</p><p>  } catch (Exception ex) {}</p><p><b>  return 0;</b></p><p>

96、;<b>  }</b></p><p>  4.2.3 數(shù)據(jù)顯示</p><p>  程序是利用Cursor游標類指向數(shù)據(jù)表中的某一項,然后進行查詢數(shù)據(jù),用Log日志顯示出來</p><p>  @Override//數(shù)據(jù)庫查詢操作</p><p>  public Cursor query(Uri uri, Stri

97、ng[] projection, String selection,String[] selectionArgs, String sortOrder) {</p><p>  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();</p><p>  // 依次參數(shù)為:表名,查詢字段,where語句,替換,group by(分組),h

98、aving(分組條件),order by(排序)</p><p>  Cursor cur = db.query(FileColumn.TABLE, projection, selection,selectionArgs, null, null, sortOrder);return cur;}</p><p><b>  5軟件測試</b></p>&l

99、t;p><b>  5.1 軟件的測試</b></p><p>  一個程序并不可能達到十分完美,難免存在一些錯誤。如果不能及時將其找出并修改,會造成系統(tǒng)崩潰并造成不必要的損失。通過軟件測試,盡可能多的找出系統(tǒng)中的錯誤,以便于及時修改。</p><p>  5.1.1 軟件測試的環(huán)境</p><p>  1、軟件測試的性能要求</p

100、><p>  軟硬件要求:系統(tǒng)環(huán)境 winXP;硬件系統(tǒng)環(huán)境 P4 2.4、1024MB內(nèi)存、80G硬盤。系統(tǒng)運行時對數(shù)據(jù)的保密性要求不高對一般的數(shù)據(jù)不要求進行加密。此外,對其他軟件幾乎沒有依賴性,程序健壯性較好。</p><p><b>  2、測試</b></p><p>  建立一張模擬的SD卡,上傳歌曲文件;分別測試其的播放、暫停、停止、上

101、/下一首的功能是否有用。 </p><p><b>  3、軟件測試的評價</b></p><p>  軟件功能評價:此軟件各模塊都能實現(xiàn)各自的功能,基本符合播放音樂的要求。</p><p>  結(jié)論:此軟件是可行的。</p><p>  5.1.2 測試階段</p><p>  軟件測試是一項復(fù)

102、雜的系統(tǒng)工程,從不同的角度考慮可以有不同的劃分方法,對測試進行分類是為了更好的明確測試的過程,了解測試究竟要完成哪些工作,盡量做到全面測試。按照軟件測試的策略和過程分類,軟件測試可分為單元測試、集成測試、確認測試、系統(tǒng)測試和驗收測試。它們被依次順序地執(zhí)行,如圖5-1所示:</p><p>  圖 5-1 軟件測試分級模型</p><p><b>  1、單元測試</b>

103、;</p><p>  單元測試是對軟件中的基本組成單位進行的測試,如一個模塊、一個過程等等。它是軟件動態(tài)測試的最基本的部分,也是最重要的部分之一,其目的是檢驗軟件基本組成單位的正確性。因為單元測試需要知道內(nèi)部程序設(shè)計和編碼的細節(jié)知識,一般應(yīng)由程序員而非測試員來完成,往往需要開發(fā)測試驅(qū)動模塊和樁模塊來輔助完成單元測試。因此應(yīng)用系統(tǒng)有一個設(shè)計很好的體系結(jié)構(gòu)就顯得尤為重要。 </p><p>

104、  一個軟件單元的正確性是相對于該單元的規(guī)約而言的。因此,單元測試以被測試單位的規(guī)約為基準。單元測試的主要方法有控制流測試、數(shù)據(jù)流測試、排錯測試、分域測試等等。</p><p><b>  2、集成測試</b></p><p>  集成測試是在軟件系統(tǒng)集成過程中所進行的測試,其主要目的是檢查軟件單位之間的接口是否正確。它根據(jù)集成測試計劃,一邊將模塊或其他軟件單位組合成

105、越來越大的系統(tǒng),一邊運行該系統(tǒng),以分析所組成的系統(tǒng)是否正確,各組成部分是否合拍。集成測試的策略主要有自頂向下和自底向上兩種。在此采用自頂向下策略,從網(wǎng)站主頁開始進入,測試每個模塊之間的聯(lián)系是否合理,如前臺展示與后臺管理的接口等。</p><p><b>  3、確認測試</b></p><p>  確認測試又稱有效性測試。它的任務(wù)是驗證軟件的有效性,即驗證軟件的功能和

106、性能及其它特性是否與用戶的要求一致。在軟件需求規(guī)格說明書中描述了全部用戶可見的軟件屬性,其中有一節(jié)叫做有效性準則,它包含的信息就是軟件確認測試的基礎(chǔ)。</p><p><b>  4、系統(tǒng)測試</b></p><p>  系統(tǒng)測試是對已經(jīng)集成好的軟件系統(tǒng)進行徹底的測試,以驗證軟件系統(tǒng)的正確性和性能等滿足其規(guī)約所指定的要求,檢查軟件的行為和輸出是否正確并非一項簡單的任務(wù)

107、,它被稱為測試的“先知者問題”。因此,系統(tǒng)測試應(yīng)該按照測試計劃進行,其輸入、輸出和其他動態(tài)運行行為應(yīng)該與軟件規(guī)約進行對比。軟件系統(tǒng)測試方法很多,主要有功能測試、性能測試、隨機測試等等。</p><p><b>  5、驗收測試</b></p><p>  驗收測試旨在向軟件的購買者展示該軟件系統(tǒng)滿足其用戶的需求。它的測試數(shù)據(jù)通常是系統(tǒng)測試的測試數(shù)據(jù)的子集。這是軟件在投

108、入使用之前的最后測試。</p><p><b>  6結(jié)論</b></p><p>  本文通過本系統(tǒng)設(shè)計與開發(fā),從而得出下列結(jié)論: </p><p>  1、學(xué)習(xí)一門新技術(shù),最重要的是實踐,只有多動手才能盡快掌握它。</p><p>  2、一個系統(tǒng)的開發(fā),經(jīng)驗是最重要的,經(jīng)驗不足,就難免會有許多考慮不周之處。&

109、lt;/p><p>  3、要想吸引更多的用戶,系統(tǒng)的界面必須要美觀、友好,功能要健全。不過由于經(jīng)驗不足,我設(shè)計的圖形界面比較簡單。只是對基本功能進行了開發(fā)。</p><p>  4、本次開發(fā),我參考了很多本系統(tǒng)的例子,吸取了一些別的本系統(tǒng)的長處,對自己的畢業(yè)設(shè)計進行了完善,但是還有很多的不足之處,有待以后進一步學(xué)習(xí)。</p><p>  本文所制作的系統(tǒng)界面友好、使用

110、靈活、操作簡單、功能齊全、表現(xiàn)方式獨特,已基本具備了成熟的技術(shù)理論。</p><p>  由于時間倉促,本次設(shè)計由我完成本系統(tǒng)的制作,對我這樣一個JSP新手而言所制作的模塊還有不完善的地方。由于是獨立完成,在畢業(yè)設(shè)計的過程遇到了很多的困難,我求教了不少老師和同學(xué),在這個過程中讓我體會到了,一個團隊的重要性。</p><p>  通過對Android手機平臺的音樂播放器的開發(fā),使我對Andr

111、oid系統(tǒng)從零進入到了一個比較高的層次的了解,Android功能是如此強大,令人不得不佩服。</p><p>  在實現(xiàn)播放器的基本功能是,一開始我是不知道要用什么來做了,直到問了同學(xué)和查看書籍資料,才知道用了一個監(jiān)聽的方法解決掉。</p><p>  因為自己對Android的掌握不是很好,播放器不夠完善,有些地方還有些不合理的地方,比如歌詞方面,這需要改善,有待以后去加強。</p

112、><p><b>  致 謝</b></p><p>  在本次畢業(yè)論文過程中,得到了指導(dǎo)老師的指導(dǎo)與支持。在此特別感謝指導(dǎo)老師的大力幫助。指導(dǎo)老師的悉心指導(dǎo)和大力支持,在總體結(jié)構(gòu)、功能的把握上給予了非常大的幫助,同時根我們提供了非常優(yōu)越的設(shè)計環(huán)境,并對我在編程設(shè)計等細節(jié)工作上給予了耐心的指導(dǎo),對于我順利完成這次畢業(yè)論文起到了關(guān)鍵性的作用。通過開發(fā)本系統(tǒng),我較全面的掌

113、握了android基本知識和編程技巧,并在開發(fā)過程中我的java開發(fā)能力得到了進一步的提高。</p><p>  在開發(fā)過程中我學(xué)到了一些經(jīng)驗:系統(tǒng)分析的好壞將決定著的系統(tǒng)開發(fā)成功與否,一份好分析設(shè)計將是成功開發(fā)主要因素。我們在著手開發(fā)之前不要急于編程,先應(yīng)有較長的時間去把分析做好,寫出相關(guān)的開發(fā)文檔等。然后再開始編寫程序代碼,這樣做到每寫一步代碼心底有數(shù),有條不絮。當(dāng)然也有些還需待繼續(xù)深入地方如:菜單功能的實現(xiàn)

114、問題等等。</p><p><b>  參 考 文 獻</b></p><p>  專著:[M]作者:余志龍 陳昱勛 鄭名杰 陳小鳳 郭秩均.</p><p>  書名[M]:Google Android SDK開發(fā)范例大全(第二版).</p><p><b>  出版地:北京</b></p&

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論