




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、畢業(yè)設(shè)計(jì)(論文)標(biāo) 題: 基于Android的音樂播放器 學(xué)生姓名: 唐虹霞 系 部: 電子信息系 專 業(yè): 軟件技術(shù) 班 級(jí): 軟件1101班 指導(dǎo)教師: 湛桂枝 湖南汽車工程職業(yè)學(xué)院教務(wù)處制目錄摘 要 當(dāng)今社會(huì)的生活節(jié)奏越來越快+Android系統(tǒng)上一的款音樂播放器應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行討論。Android是一個(gè)開源的系統(tǒng),它底層是基于Linux的操作系統(tǒng),本論文的音樂播放器采用了Android開源系統(tǒng)技術(shù),利用Java語言和Eclipse編輯工具對(duì)播放器進(jìn)行編寫。同時(shí)給出了詳細(xì)的系統(tǒng)設(shè)計(jì)過程、部分界面圖及主要功能運(yùn)行流程圖,本文還對(duì)高度過程中遇到的問題和解決方法進(jìn)行了詳細(xì)的討論,該音樂
2、播放器集播放、暫停、停止、上一首、下一首、音量調(diào)節(jié)、歌詞顯示等功能于一體,性能良好,在Android系統(tǒng)中能獨(dú)立運(yùn)行。該播放器還擁有對(duì)手機(jī)文件瀏覽器的訪問功能、歌曲播放模式、以及歌詞開閉狀態(tài)的友好設(shè)置.MP3的全名是MPEG Audio Layer-3,是一種聲音文件的壓縮格式,由于本播放器只限于應(yīng)用層程序的探討,所以對(duì)具體的壓縮算法不作深究。關(guān)鍵詞:Android ; 開源系統(tǒng) ; Eclipse ; 音樂播放器1系統(tǒng)需求分析1.1功能需求1.1.1播放器的基本控制需求根據(jù)項(xiàng)目的目標(biāo),我們可獲得項(xiàng)目系統(tǒng)的基本需求,一下從不同的角度來描述系統(tǒng)的需求,并且使用用例圖來描述,系統(tǒng)的功能需求,我們分
3、成四部分來概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器擴(kuò)展卡需求。播放暫停停止上一曲下一曲 圖1.1 播放器基本控制圖 在播放器正在運(yùn)行時(shí),用戶單擊“播放”按鈕,播放器將播放選中的播放列表中的音樂,并同時(shí)顯示當(dāng)前進(jìn)度;當(dāng)歌曲未暫?;蛲V箷r(shí),用戶單擊“暫?!卑粹o,播放器將進(jìn)入暫停狀態(tài);播放器正在播放或暫停時(shí),用戶單擊“停止”按鈕,播放器將停止播放或暫停時(shí),用戶點(diǎn)擊“上一首”或者“下一首”按鈕,播放器將播放上一首或下一首歌曲。1.1.2功能需求(時(shí)序圖)分析從時(shí)序圖中可以看出播放器中信息發(fā)送和調(diào)用過程主界面播放列表播放界面點(diǎn)擊進(jìn)入按鈕選擇歌曲播放進(jìn)入播放列表播放后臺(tái)se
4、rviceServic播放頁面發(fā)送參數(shù),調(diào)用后臺(tái)service播放,返回播放界面圖1.2 音樂播放器的時(shí)序圖1.2 系統(tǒng)結(jié)構(gòu)圖和流程圖主界面是否顯示全部音樂播放列表是否點(diǎn)擊要播放的歌曲音樂播放程序結(jié)束圖1.3 音樂播放器系統(tǒng)流程圖1.3系統(tǒng)界面需求播放器界面要求布局合理,簡(jiǎn)約,顏色舒適,控制按鈕友好,能讓用戶一眼就能看出各個(gè)按鈕的作用及操作方法。能實(shí)現(xiàn)要求的功能,但又不重復(fù)。要考慮到不同手機(jī)屏幕大小可能不一樣,應(yīng)盡量兼容大多數(shù)手機(jī)屏幕尺寸,使之顯示無障礙。1.4系統(tǒng)性能需求根據(jù)Android手機(jī)系統(tǒng)要求無響應(yīng)時(shí)間為5秒,所以就有如下性能要求:1、 當(dāng)要求歌曲播放時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒
5、2、 當(dāng)要求歌曲暫停時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒3、 當(dāng)要求歌曲停止時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒4、 當(dāng)要求歌曲上/下一首時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過5秒5、 界面切換響應(yīng)時(shí)間最長(zhǎng)不能超過3秒1.5運(yùn)行環(huán)境需求操作系統(tǒng):Windows xp支持環(huán)境:Android 2.1版本開發(fā)環(huán)境:Eclipse 3.5 ADT 0.952 Android項(xiàng)目介紹2.1什么是Android2.1.1Android的介紹Android一詞的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱
6、是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。Android是基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),早期由Google開發(fā)(在華注冊(cè)商標(biāo)名為“安致”),后由開放手機(jī)聯(lián)盟(Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術(shù),Google和其他幾十個(gè)手機(jī)公司建立開發(fā)手機(jī)聯(lián)盟。Android在未公開之前常被傳聞為Google電話或gPhone。大多傳聞?wù)J為Google開發(fā)的是自
7、己的手機(jī)電話產(chǎn)品,而不是一套軟件平臺(tái)。到了2010年1月,Google開始發(fā)表自家品牌手機(jī)電話的Nexus One。2.1.2 Android Features 特性:Android 系統(tǒng)有如下的幾大特性1. 應(yīng)用程序框架 支持組建的重用與替換2. Dalvik 虛擬機(jī) 專門為移動(dòng)設(shè)備做了優(yōu)化3. 內(nèi)部集成瀏覽器 該瀏覽器基于開源的WebKit引擎4. 優(yōu)化的圖形庫 包括2D和3D圖形庫,3D圖形庫基于OpenGl ES5. SQLite 用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)6. 多媒體支持 包括常見的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)7.
8、 GSM電話 (依賴于硬件)8. 藍(lán)牙Bluetooth,EDGE,3G,安定WIFI(依賴于硬件)9. 照相機(jī),GPS,指南針,和加速度計(jì)(依賴于硬件)10. 豐富的開發(fā)環(huán)境 包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件2.1.3 Android 基本框架(Android Architecture)圖2. 1Android Architecture(android 軟件結(jié)構(gòu)圖)其軟件層次結(jié)構(gòu)自上而下分為以下幾個(gè)層次第一、 應(yīng)用程序(Application)第二、 應(yīng)用程序框架(Application Framework)第三、 各種庫(Libraries)和
9、Android運(yùn)行環(huán)境(RunTime)第四、 操作系統(tǒng)層(1) ApplicationApplication Android 會(huì)同一核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是用JAVA編寫的。(2) Application FrameWork 開發(fā)者完全可以訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來簡(jiǎn)化組件軟件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其他的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過的遵循框架的安全性限制)。該應(yīng)用程序重用機(jī)制使得組件可以被用戶替換。所有的應(yīng)用程序都由
10、一系列的服務(wù)和系統(tǒng)組成,包括:a 可擴(kuò)展的視圖(Views)可以用來建應(yīng)用程序,包括列表(lists),網(wǎng)格(Grids),文本框(Text boxes),按鈕(button),甚至包括另一個(gè)可嵌入的web瀏覽器。b 內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人的數(shù)據(jù)庫),或者共享它們自己的數(shù)據(jù)。c 資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和分層文件(Layout Files)。d 通知管理器(Notification Manager)使得應(yīng)用程序生可以在狀態(tài)欄中顯示客戶通知信息。e 活動(dòng)類管
11、理器(Activity Manager)用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。(3) Libraries庫Android包括一個(gè)被Android系統(tǒng)中各種不同組件所使用的C/C+庫集。該庫通過Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。(4) Android RuntimeAndroid包括了一個(gè)核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。 每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對(duì)于同時(shí)高效地運(yùn)行多個(gè)VMS來實(shí)現(xiàn)的。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對(duì)最小內(nèi)存使用做
12、了優(yōu)化。該虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA匯編器編譯,然后通過SDK中的dx工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。 Dalvik虛擬機(jī)依賴于linux的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。(5) Linux內(nèi)核Android的核心系統(tǒng)服務(wù)依賴于Linux2.6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件堆棧之間的硬件抽象層。2.2 Android應(yīng)用軟件開發(fā)的核心技術(shù)2.2.1 Android 應(yīng)用開發(fā)語言JAVA是Android上的主流開發(fā)語言,各種支持也最完善。Android發(fā)布的API和SDK也都主要是面向JAVA開發(fā)人員的。
13、我的播放器實(shí)例也是用JAVA開發(fā)的。2.2.2 Android 應(yīng)用程序組件Android 應(yīng)用程序最大的一個(gè)特點(diǎn)就是每個(gè)應(yīng)用都由若干組件構(gòu)成。而且各個(gè)應(yīng)用程序的組件還可以相互調(diào)用(需要在代碼中設(shè)置相應(yīng)權(quán)限)。例如假設(shè)我們需要編寫一個(gè)內(nèi)嵌于網(wǎng)頁的程序,那么我們無需親自編寫瀏覽器,而是可以直接調(diào)用系統(tǒng)自帶的Chrome Lite瀏覽器組件。又如假設(shè)我們編寫了兩個(gè)應(yīng)用程序,其中一個(gè)程序中有列表顯示圖標(biāo)的組件,那么我們?cè)诹硪粋€(gè)應(yīng)用程序中就可以使用該組件,而不需要在編寫該功能。也就是說,不同于我們平常編寫的程序,Android的應(yīng)用程序不是單一入口,而是可以從代碼的不同位置啟動(dòng)。這就要依靠組件來實(shí)現(xiàn)。
14、Android應(yīng)用程序的組件有以下四種:1. Activity一個(gè)Activity實(shí)際上表現(xiàn)出來的就是一個(gè)程序的界面。這個(gè)界面可能有許多不同的形式,比如有列表形式,有文字形式,有圖像格子等形式。一個(gè)應(yīng)用程序也可能有不止一個(gè)Activity。比如一耳光短消息的程序,需要有列表顯示所有消息的Activity,還至少需要一個(gè)編輯短信的Activity,還可能需要設(shè)置、菜單等界面。每個(gè)Activity都有一個(gè)默認(rèn)的窗口用于繪制界面,一般情況下,它是充滿全屏的,但是我們可以通過程序控制它,使其小于屏幕大小,也可以控制其浮動(dòng)于其他窗口之上(如Android中的Toast信息)。Activity中顯示出來的
15、內(nèi)容其實(shí)是由view堆疊形成的,view是由View基類派生出來的各種形式的界面元素,如ListView,GridView等等,通過組合這些view,就形成了一個(gè)可見的Activity。我們可以用Activity.setContentView()方法來設(shè)置一個(gè)Activity中所要顯示的view。2. ServiceService是一種沒有界面的組件,同我們平常在Windows或Linux系統(tǒng)中所理解的“服務(wù)”一樣,Android上的service也是運(yùn)行在后臺(tái)的,運(yùn)行時(shí)間可以從系統(tǒng)啟動(dòng)到系統(tǒng)關(guān)閉為止。對(duì)于許多應(yīng)用程序來說,service組件式至關(guān)重要的。以下載管理器為例,用戶肯定希望能夠在切
16、換到其他程序時(shí)仍然在后臺(tái)繼續(xù)下載,這就需要用到service完成下載工作。而顯示下載進(jìn)度、已下載文件等信息則由Activity完成,同時(shí)我們還希望控制下載過程,如停止、繼續(xù)等,這就需要Activity與service之間進(jìn)行通信。Android允許activity連接到或者綁定到service上,這樣就可以讓用戶在界面上控制后臺(tái)service的行為。3. Broadcast receiverBroadcast意為廣播消息,Android系統(tǒng)自身會(huì)發(fā)出許多廣播消息,如電量不足,用戶修改了全局設(shè)置等,各個(gè)應(yīng)用程序也以向整個(gè)系統(tǒng)廣播消息,如文件下載。Broadcast receiver則是程序中專門
17、用來接收廣播消息的組件,它沒有界面顯示,只負(fù)責(zé)監(jiān)聽、接收廣播消息,然后根據(jù)程序邏輯,啟動(dòng)其他組件去處理廣播消息。它可以啟動(dòng)一個(gè)Activity來同用戶交互,也可以使用NotificationManager向用戶發(fā)出通知。NitificationManager的 通知形式有許多種,不如說振動(dòng)、響鈴、閃LED燈,還可以在Android界面的消息欄處顯示信息。4. Content providersContent provider是一種為其它應(yīng)用程序提供數(shù)據(jù)的組件。這些數(shù)據(jù)可以保存在文件中,也可以保存在SQLite數(shù)據(jù)庫中,還可以以其他任何有效的方式保存。ContentProvider類為我們提供了
18、一系列保存數(shù)據(jù)的方法供我們調(diào)用,可以很方便地存儲(chǔ)數(shù)據(jù)。其它應(yīng)用程序在需要使用這些數(shù)據(jù)時(shí),可以用ContentResolver對(duì)象,使用其中的方法。ContentResolver可以與任何contentprovider交互,獲取其中的數(shù)據(jù)。只需要某個(gè)組件,Android就會(huì)盡力保證它的可用;如果該組件還沒有啟動(dòng),就啟動(dòng)它,如果該組件所屬的應(yīng)用程序還沒擁有一個(gè)進(jìn)程,則為它啟動(dòng)一個(gè)進(jìn)程,如果系統(tǒng)資源不足以容納一個(gè)新的進(jìn)程,則將后臺(tái)的某個(gè)進(jìn)程殺死為新進(jìn)程騰出資源。2.3 Android開發(fā)環(huán)境的搭配任何事物要運(yùn)行,都要有它的環(huán)境,Android也有它的環(huán)境才能夠運(yùn)行,下面介紹Android的開發(fā)環(huán)境配
19、置.搭建開發(fā)環(huán)境需要的軟件:操作系統(tǒng):Windows XP或Linux軟件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Develoopment Tool)IDE環(huán)境:Eclipse IDE+ADT Eclipse3.3以上JDK:Java Runtime Environment虛擬機(jī) 、(JDK)Java Development kit安裝步驟如下:第一步:安裝Java虛擬機(jī)sun-java6-jdk版本第二步:安裝Eclipse3.5工具 官網(wǎng)選擇版本(圖4.2):進(jìn)行安裝圖 2.2 第三
20、步:安裝Android SDK:首先要下載SDK,可以在這個(gè)網(wǎng)址下載Http:/ ,選擇相應(yīng)的系統(tǒng)進(jìn)行安裝圖 2.3 第四步:安裝Android ADT插件運(yùn)行Eclipse,選擇help-install new software 選擇add,將會(huì)彈出一個(gè)框圖 2.4 點(diǎn)擊OK,選擇要安裝的軟件,占next,然后選擇接受協(xié)議,直到安裝成功,重啟Eclipse軟件,設(shè)置Android SDK Home,Window-refrence圖 2.5 在SDK location中輸入SDK Tools路徑:D:android softwareandroid-sdk-windows 點(diǎn)擊OK這樣Andro
21、id環(huán)境就已經(jīng)搭建成功了。2.4 Android模擬器中sd卡的創(chuàng)建和文件的上傳在Android模擬器中,初始時(shí)沒有sdcard的,為了存放音樂文件,需要自己創(chuàng)建sdcard,我們先來看看如何創(chuàng)建sdcard以及文件上傳。2.4.1 SD卡的創(chuàng)建通過Android的Tools來創(chuàng)建sd卡并導(dǎo)入進(jìn)來1. 打開dos,windows+R鍵打開。轉(zhuǎn)換到你的sdk安裝包的tools目錄下,如我的目錄如下:E:android-sdk-windowstools 2. 創(chuàng)建sd卡。在命令行中輸入:mksdcard 1024M E:androidsdcardsdcard.img(這個(gè)1024M就是我們要?jiǎng)?chuàng)建的
22、SD卡的大小,還是根據(jù)自己的需要來輸入,最后面的那個(gè)E:androidsdcardsdcard.img就是所設(shè)置的SD存放路徑,這里也可以根據(jù)我們自己的需要改變路徑的,但要注意路徑中不能有空格出現(xiàn))3. 在Eclipse里面創(chuàng)建模擬器,并以該SD開來創(chuàng)建4. 創(chuàng)建完成之后,啟動(dòng)該模擬器??梢栽贏ndroidSDK and AVD Manager 里面指定模擬器并啟動(dòng)。5. 同樣打開Eclipse的DDMS-FileExplorer 查看sd卡是否安裝成功。2.4.2向sd卡里面上傳文件及異常解決右邊兩個(gè)小手機(jī)按鈕就是傳輸文件的按鈕了,用它來實(shí)現(xiàn)文件的傳入和傳出了,向左的表示把手機(jī)里的文件導(dǎo)出,
23、向右的表示把文件導(dǎo)入到手機(jī)里面去。這里和容易出現(xiàn)異常。異常如下:異常一:Failed to push selection:Invalid argument出現(xiàn)此異常,多半是文件所在的目錄里面有中文或者文件的名字是中文導(dǎo)致的。建議修改一下試試。還有就是觀察自己的操作權(quán)限是不是不夠,如果是,drwxrx 那就是可以的。如果,sd卡是在eclipse里面系統(tǒng)自動(dòng)創(chuàng)建的,試著重啟一下IDE。異常二:Failed to push the item(s)出現(xiàn)這個(gè)異常是因?yàn)閭鬏敵瑫r(shí)造成的。可以修改。 打開windowsPreferenceandroidDDMS 把ADB connection tine ou
24、t 項(xiàng)的超時(shí)時(shí)間改大點(diǎn)。3音樂播放器的詳細(xì)設(shè)計(jì)3.1 播放器主界面的設(shè)計(jì)和說明Android的每一個(gè)可視化界面,都有其唯一的布局配置文件,該文件里面有各種布局方式,各種資源文件如圖像,文字,顏色的引用,程序在運(yùn)行時(shí),可以通過代碼對(duì)配置文件進(jìn)行讀取。這樣就可以形成不同的可視化界面和絢麗的效果。主界面布局文件內(nèi)容如下: 此處的ListView作用為列出歌曲此處的ImageButton用于第一曲 此處的ImageButton用于上一曲 此處的ImageButton用于播放與暫停 此處的ImageButton用于下一曲 此處的ImageButton用于最后一曲 主界面為:3.2 Android媒體播放
25、原理Android源程序已經(jīng)為我們封裝了一個(gè)接口類,叫MediaPlayer。該接口在執(zhí)行前需要一個(gè)數(shù)據(jù)源,通過如下四個(gè)步驟: 第一步:MediaPlayer.reset(); 復(fù)位操作,為以后的媒體準(zhǔn)備播放做準(zhǔn)備。 第二步:傳入歌曲數(shù)據(jù)源,這里也是一個(gè)數(shù)據(jù)源:MediaPlayer.setDataSource(String path);參數(shù)需要一個(gè)路徑,該接口類在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。 第三步:準(zhǔn)備播放數(shù)據(jù)源,調(diào)用MediaPlayer.prepare(); 第四步:MediaPlayer.start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再于程序有關(guān),需要調(diào)用MediaPlayer.st
26、op()方法讓其停止或MediaPlayer.start();讓其啟動(dòng)。3.3 播放功能實(shí)現(xiàn)細(xì)節(jié)為了實(shí)現(xiàn)音樂播放器的基本功能:音樂播放、暫停、停止、上一首、下一首。這里我用事件監(jiān)聽,詳細(xì)如下:3.3.1 播放器播放、暫停、停止等功能 圖 3.3.1 如圖5.4所示:各按鈕水平放置,用的是布局中的線性布局LinearLayout,用方法setOrientation(horizontal);將其設(shè)置為水平。LinearLayout中依次放置第一曲、上一曲、播放與暫停、下一曲、最后一曲按鈕屬性。配置文件代碼結(jié)構(gòu)如下: android的媒體播放原理:android源程序已經(jīng)為我們封裝好了一個(gè)接口類,叫
27、MediaPlayer。該接口在執(zhí)行行需要一個(gè)數(shù)據(jù)源,通過如下四個(gè)步驟:第一步:MediaPlayer.reset();復(fù)位操作,為以后的媒體準(zhǔn)備播放作準(zhǔn)備。 第二步:傳入歌曲數(shù)據(jù)源,這里也是一個(gè)數(shù)據(jù)流 MediaPlayer.setDataSource(String path);參數(shù)需要傳一個(gè)路徑,該接口類在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。第三步:準(zhǔn)備播放數(shù)據(jù)源,調(diào)用方法MediaPlayer.Prepare();第四步:MediaPlayer.Start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再與程序 有關(guān),需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start
28、();讓其啟動(dòng);歌曲數(shù)據(jù)源的獲得:要獲得數(shù)據(jù)源,需要我們提供給接口類一個(gè)歌曲存放路徑,而這個(gè)路徑已經(jīng)被事先放到數(shù)據(jù)庫里了,我們只需要進(jìn)行數(shù)據(jù)庫進(jìn)行操作。將里面的路徑取出。這里將調(diào)用PlayRackActivity的一個(gè)方法query();代碼算法如下:public String query() ContentResolver cr = getContentResolver();Uri uri = DBProvider.CONTENT_URI;String projection = path ;String selection = fileName=?;String selectionArgs
29、= selectName ;Cursor c=cr.query(uri,projection,selection, selectionArgs, null);if (c.moveToFirst() String path = c.getString(0);return path;return null; 方法getContentResolver是包android.content.ContextWrapper里面的方法,它會(huì)自動(dòng)的調(diào)用ContentProvider中的關(guān)聯(lián)數(shù)據(jù)庫,我們需用這個(gè)方法就可以操作數(shù)據(jù)庫。數(shù)據(jù)庫操作需要一個(gè)Uri 。Uri類似一個(gè)網(wǎng)絡(luò)連接的Url。Uri是數(shù)據(jù)庫唯一的標(biāo)識(shí)
30、,不同的Uri可以操作不同的數(shù)據(jù)庫表。在查詢數(shù)據(jù)庫時(shí)需要傳入一個(gè)當(dāng)前播放的歌曲名字,通過歌曲名字來查詢歌曲的路徑。4 Android數(shù)據(jù)庫設(shè)計(jì) 數(shù)據(jù)結(jié)構(gòu)組織和數(shù)據(jù)庫文件設(shè)計(jì)要根據(jù)不同用途,使用要求等,來決定數(shù)據(jù)的整體組織形式等一系列問題。數(shù)據(jù)庫,顧名思義,是存放數(shù)據(jù)的倉庫。只不過這個(gè)倉庫是在計(jì)算機(jī)存儲(chǔ)設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的。數(shù)據(jù)庫中的數(shù)據(jù)按一定數(shù)據(jù)模型組織、描述和存儲(chǔ),具有較小的重復(fù)度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并且可以被在一定范圍內(nèi)的各種用戶共享。在涉及數(shù)據(jù)庫的軟件開發(fā)中,需要根據(jù)有待解決的問題性質(zhì)、規(guī)模,以及所采用的前端程序創(chuàng)建工具等,做出合適的數(shù)據(jù)庫類型選擇4.1 數(shù)據(jù)庫
31、及字段屬性設(shè)計(jì)4.1.1 字段設(shè)計(jì)(表、圖)file_table 主要是保存歌曲名字、類型、路徑字段說明:Id 歌曲id號(hào) fileName 歌曲名字 filePath 歌曲路徑 sort 歌曲類型(表4.1、圖4.1.1) Android自帶一個(gè)MediaStore封閉類 專門來存儲(chǔ)媒體信息通過Uri EXTERNAL_CONTENT_URI 來訪問SDcard中的歌曲詳細(xì)信息。存放媒體信息如TITLE(標(biāo)題)、ARTIST(藝術(shù)家)、ALBUM(專輯)、SIZE(大小 )(表4.2、圖4.1.2) 屬性數(shù)據(jù)類型允許空主鍵_IdINTEGERNot nullPrimary keyfileNa
32、meTEXTNot nullfilePathTEXTsortINTEGER 表4.1 屬性數(shù)據(jù)類型允許空主鍵_IDINTEGERNot nullPrimary keyTITLETEXTNot nullARTISTTEXTALBUMTEXTSIZELONG表4.2 圖4.1.1 歌曲列表 圖4.1.2 歌曲詳細(xì) 4.1.2 音樂播放器E-R圖音樂播放器 E-R(實(shí)體-聯(lián)系:entity-relation圖)圖(圖4.1.3) 圖4.1.3 E-R圖 4.2 數(shù)據(jù)庫連接 這里將介紹如何進(jìn)行Android數(shù)據(jù)庫連接,Android中自帶SQLite數(shù)據(jù)庫,這是一個(gè)十分小型的數(shù)據(jù)庫,這樣正適合Andr
33、oid這種移動(dòng)平臺(tái)使用。Android數(shù)據(jù)庫存儲(chǔ)的位置在data/data/databases/目錄下 Android是利用ContentProvider作為內(nèi)容提供商,SQLiteOpenHelper數(shù)據(jù)庫幫助類來進(jìn)行對(duì)數(shù)據(jù)庫的創(chuàng)建和操作。通過Context.getContentResolver()方法直接對(duì)數(shù)據(jù)庫進(jìn)行操作。程序中數(shù)據(jù)庫類為DBHelper extends SQLiteOpenHelper(繼承關(guān)系),內(nèi)容提供類DBProvider extends ContentProvider(繼承關(guān)系)4.2.1 創(chuàng)建數(shù)據(jù)庫 Android 提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫創(chuàng)建方式。繼承SQLiteO
34、penHelper ,實(shí)現(xiàn)onCreate 和 onUpgrade 兩個(gè)方法,有個(gè)好處就是便于數(shù)據(jù)庫版本的升級(jí),連接數(shù)據(jù)庫的算法如下:public DBHelper(Context context) / 創(chuàng)建數(shù)據(jù)庫super(context, DATABASE_NAME,null, DATABASE_VERSION);public void onCreate(SQLiteDatabase db) / 創(chuàng)建時(shí)調(diào)用 db.execSQL(DATABASE_CREATE);public void onUpgrade(SQLiteDatabase db, int oldVersion, int new
35、Version) / 版本更新時(shí)調(diào)用db.execSQL(DROP TABLE IF EXISTS File_Table);onCreate(db); Override / 在ContextProvider運(yùn)行時(shí)自動(dòng)創(chuàng)建數(shù)據(jù)庫 public boolean onCreate() dbOpenHelper= new DBHelper(getContext(); return true;數(shù)據(jù)庫如果創(chuàng)建不成功則拋出FIleNotFoundException異常4.2.2 操作數(shù)據(jù)庫 Android對(duì)數(shù)據(jù)庫的操作主要有插入、刪除、更新、查詢操作,在進(jìn)行任何操作時(shí)都必須指定一個(gè)Uri,才能對(duì)相應(yīng)的表進(jìn)行
36、數(shù)據(jù)操作。/數(shù)據(jù)庫刪除操作Overridepublic int delete(Uri arg0, String arg1, String arg2) SQLiteDatabase db = dbOpenHelper.getWritableDatabase();try Db.delete(FileColumn.TABLE, arg1, arg2); catch (Exception ex) ex.printStackTrace();return 1;Override/數(shù)據(jù)庫插入操作public Uri insert(Uri uri, ContentValues values) SQLiteDat
37、abase db = dbOpenHelper.getWritableDatabase();long count = 0;try count = db.insert(FileColumn.TABLE, null, values); catch (Exception ex) ex.printStackTrace(); if (count 0) return uri;else return null;/ 數(shù)據(jù)庫更新操作Overridepublic int update(Uri uri, ContentValues values, String selection,String selectionA
38、rgs) SQLiteDatabase db = dbOpenHelper.getWritableDatabase();int i = 0;try i = db.update(FileColumn.TABLE, values, selection, null);return i; catch (Exception ex) return 0;4.2.3 數(shù)據(jù)顯示程序是利用Cursor游標(biāo)類指向數(shù)據(jù)表中的某一項(xiàng),然后進(jìn)行查詢數(shù)據(jù),用Log日志顯示出來Override/數(shù)據(jù)庫查詢操作public Cursor query(Uri uri, String projection, String sele
39、ction,String selectionArgs, String sortOrder) SQLiteDatabase db = dbOpenHelper.getWritableDatabase();/ 依次參數(shù)為:表名,查詢字段,where語句,替換,group by(分組),having(分組條件),order by(排序)Cursor cur = db.query(FileColumn.TABLE, projection, selection,selectionArgs, null, null, sortOrder);return cur;5軟件測(cè)試5.1 軟件的測(cè)試一個(gè)程序并不可能達(dá)
40、到十分完美,難免存在一些錯(cuò)誤。如果不能及時(shí)將其找出并修改,會(huì)造成系統(tǒng)崩潰并造成不必要的損失。通過軟件測(cè)試,盡可能多的找出系統(tǒng)中的錯(cuò)誤,以便于及時(shí)修改。5.1.1 軟件測(cè)試的環(huán)境 1、軟件測(cè)試的性能要求軟硬件要求:系統(tǒng)環(huán)境 winXP;硬件系統(tǒng)環(huán)境 P4 2.4、1024MB內(nèi)存、80G硬盤。系統(tǒng)運(yùn)行時(shí)對(duì)數(shù)據(jù)的保密性要求不高對(duì)一般的數(shù)據(jù)不要求進(jìn)行加密。此外,對(duì)其他軟件幾乎沒有依賴性,程序健壯性較好。 2、測(cè)試建立一張模擬的SD卡,上傳歌曲文件;分別測(cè)試其的播放、暫停、停止、上/下一首的功能是否有用。 3、軟件測(cè)試的評(píng)價(jià)軟件功能評(píng)價(jià):此軟件各模塊都能實(shí)現(xiàn)各自的功能,基本符合播放音樂的要求。 結(jié)論:
41、此軟件是可行的。5.1.2 測(cè)試階段軟件測(cè)試是一項(xiàng)復(fù)雜的系統(tǒng)工程,從不同的角度考慮可以有不同的劃分方法,對(duì)測(cè)試進(jìn)行分類是為了更好的明確測(cè)試的過程,了解測(cè)試究竟要完成哪些工作,盡量做到全面測(cè)試。按照軟件測(cè)試的策略和過程分類,軟件測(cè)試可分為單元測(cè)試、集成測(cè)試、確認(rèn)測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試。它們被依次順序地執(zhí)行,如圖5-1所示:圖 5-1 軟件測(cè)試分級(jí)模型1、單元測(cè)試單元測(cè)試是對(duì)軟件中的基本組成單位進(jìn)行的測(cè)試,如一個(gè)模塊、一個(gè)過程等等。它是軟件動(dòng)態(tài)測(cè)試的最基本的部分,也是最重要的部分之一,其目的是檢驗(yàn)軟件基本組成單位的正確性。因?yàn)閱卧獪y(cè)試需要知道內(nèi)部程序設(shè)計(jì)和編碼的細(xì)節(jié)知識(shí),一般應(yīng)由程序員而非測(cè)試員
42、來完成,往往需要開發(fā)測(cè)試驅(qū)動(dòng)模塊和樁模塊來輔助完成單元測(cè)試。因此應(yīng)用系統(tǒng)有一個(gè)設(shè)計(jì)很好的體系結(jié)構(gòu)就顯得尤為重要。 一個(gè)軟件單元的正確性是相對(duì)于該單元的規(guī)約而言的。因此,單元測(cè)試以被測(cè)試單位的規(guī)約為基準(zhǔn)。單元測(cè)試的主要方法有控制流測(cè)試、數(shù)據(jù)流測(cè)試、排錯(cuò)測(cè)試、分域測(cè)試等等。2、集成測(cè)試集成測(cè)試是在軟件系統(tǒng)集成過程中所進(jìn)行的測(cè)試,其主要目的是檢查軟件單位之間的接口是否正確。它根據(jù)集成測(cè)試計(jì)劃,一邊將模塊或其他軟件單位組合成越來越大的系統(tǒng),一邊運(yùn)行該系統(tǒng),以分析所組成的系統(tǒng)是否正確,各組成部分是否合拍。集成測(cè)試的策略主要有自頂向下和自底向上兩種。在此采用自頂向下策略,從網(wǎng)站主頁開始進(jìn)入,測(cè)試每個(gè)模塊之間的聯(lián)系是否合理,如前臺(tái)展示與后臺(tái)管理的接口等。3、確認(rèn)測(cè)試確認(rèn)測(cè)試又稱有效性測(cè)試。它的任務(wù)是驗(yàn)證軟件的有效
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版二年級(jí)下冊(cè)數(shù)學(xué)第五單元拔尖檢測(cè)卷(含答案)
- 運(yùn)營筆試題目解答及答案
- 云南考編面試題庫及答案
- 云夢(mèng)教師面試題目及答案
- 月嫂面試考試試題及答案
- 《動(dòng)力電池及能量管理技術(shù)》課件-任務(wù)5 動(dòng)力電池安全管理及數(shù)據(jù)通信
- 物理治療學(xué)模擬習(xí)題與答案
- 山東省聊城市2024-2025學(xué)年高一下學(xué)期期中考試 歷史 PDF版含答案
- 金融投資中的數(shù)學(xué)模型應(yīng)用
- 金融行業(yè)大數(shù)據(jù)分析與預(yù)測(cè)
- 2025年山西文旅集團(tuán)招聘筆試參考題庫含答案解析
- 品管圈PDCA獲獎(jiǎng)案例提高護(hù)士對(duì)患者身份識(shí)別和查對(duì)制度的正確率
- 鹽酸裝卸車操作規(guī)程(3篇)
- 業(yè)主自治組織運(yùn)作研究-洞察分析
- 零售連鎖店標(biāo)準(zhǔn)化運(yùn)營手冊(cè)
- 2024年國家電網(wǎng)招聘之電工類考試題庫附答案(滿分必刷)
- TDT10722022國土調(diào)查坡度分級(jí)圖制作技術(shù)規(guī)定
- 三年級(jí)語文下冊(cè) 期末復(fù)習(xí)非連續(xù)文本閱讀專項(xiàng)訓(xùn)練(五)(含答案)(部編版)
- 多聯(lián)機(jī)投標(biāo)技術(shù)標(biāo)-空調(diào)設(shè)備供貨及安裝工程投標(biāo)書
- 離婚協(xié)議書(直接打印完整版)
- 學(xué)校食堂食品召回制度
評(píng)論
0/150
提交評(píng)論