版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android平臺的音樂播放器-畢業(yè)論文
- 畢業(yè)論文——基于android平臺的音樂播放器
- 畢業(yè)論文——基于android音樂播放器的設(shè)計
- 基于android的音樂播放器的設(shè)計-畢業(yè)論文
- 基于android手機平臺的音樂播放器-畢業(yè)論文
- 基于android手機平臺的音樂播放器【畢業(yè)論文】
- 畢業(yè)論文基于android手機平臺的音樂播放器
- 畢業(yè)論文范文——android音樂播放器
- 畢業(yè)論文設(shè)計 基于android手機平臺的音樂播放器
- 基于android開發(fā)音樂播放器的設(shè)計-畢業(yè)論文
- 基于android平臺的音樂播放器設(shè)計與實現(xiàn)畢業(yè)論文
- 基于Android音樂播放器的設(shè)計與開發(fā)畢業(yè)論文.doc
- 基于android平臺的音樂播放器設(shè)計與實現(xiàn)畢業(yè)論文
- 【畢業(yè)課題論文】android手機平臺音樂播放器
- 畢業(yè)論文--android在線音樂播放器設(shè)計與實現(xiàn)
- 軟件工程畢業(yè)論文-基于android系統(tǒng)的音樂播放器的實現(xiàn)
- 畢業(yè)設(shè)計(論文)基于android手機平臺的音樂播放器
- android平臺的音樂視頻播放器論文
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設(shè)計與實現(xiàn)
- 軟件工程畢業(yè)論文-基于android系統(tǒng)的音樂播放器的實現(xiàn)2
評論
0/150
提交評論