




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
手機(jī)MP帝樂(lè)播放器設(shè)計(jì)方案班級(jí):移商1001組員:馬**黃*摘要當(dāng)今社會(huì)的生活節(jié)奏越來(lái)越快,隨著硬件移動(dòng)設(shè)備的越來(lái)越先進(jìn),人們對(duì)移動(dòng)設(shè)備的要求也越來(lái)越高,從以前的追求技術(shù)到現(xiàn)在的追求視覺(jué), 因此,也逐步的提高了對(duì)系統(tǒng)的要求,本文主要是對(duì)Android系統(tǒng)上音樂(lè)播放器應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行討論。本論文的音樂(lè)播放器采用了 Android開(kāi)源系統(tǒng)技術(shù),利用Java語(yǔ)言和Eclipse編輯工具對(duì)播放器進(jìn)行編寫(xiě),同時(shí)給出了詳細(xì)的系統(tǒng)設(shè)計(jì)過(guò)程、部分界面圖及主要功能運(yùn)行流程圖,本文還對(duì)開(kāi)發(fā)過(guò)程中遇到的問(wèn)題和解決方法進(jìn)行了詳細(xì)的討論,該音樂(lè)播放器集播放、暫停、停止、上一首、下一首、音量調(diào)節(jié)、歌詞顯示等功能于一體,性能良好,在Android系統(tǒng)中能獨(dú)立運(yùn)行。該播放器還擁有對(duì)手機(jī)文件瀏覽器的訪問(wèn)功能、 歌曲播放模式、以及歌詞開(kāi)閉狀態(tài)的友好設(shè)置。通過(guò)對(duì)基于Android平臺(tái)下的播放器的設(shè)計(jì),了解音樂(lè)播放器的設(shè)計(jì)的原理和實(shí)現(xiàn)的相關(guān)技術(shù),掌握了 Android編程思想以及基本的應(yīng)用組件,對(duì)以后從事Android開(kāi)發(fā)有很大的幫助。關(guān)鍵字:Android;開(kāi)源系統(tǒng);音樂(lè)播放器;Java目錄TOC\o"1-5"\h\z\o"CurrentDocument"第一章引言 3\o"CurrentDocument"選題目的及意義 3\o"CurrentDocument"項(xiàng)目背景 3\o"CurrentDocument"第二章系統(tǒng)需求分析 4\o"CurrentDocument"功能需求 4\o"CurrentDocument"播放器控制需求 4\o"CurrentDocument"播放器擴(kuò)展卡需求 4\o"CurrentDocument"系統(tǒng)界面需求 4\o"CurrentDocument"系統(tǒng)性能需求 5\o"CurrentDocument"運(yùn)行環(huán)境需求 5\o"CurrentDocument"第三章安卓項(xiàng)目介紹 6\o"CurrentDocument"安卓簡(jiǎn)介及優(yōu)點(diǎn) 6安卓簡(jiǎn)介 6安卓?jī)?yōu)點(diǎn) 7\o"CurrentDocument"搭建安卓開(kāi)發(fā)環(huán)境 7\o"CurrentDocument"Andriod音樂(lè)播放器項(xiàng)目工程設(shè)計(jì) 8Andriod項(xiàng)目 8Andriod工程程序設(shè)計(jì) 9AndroidManifest.xml文件 10\o"CurrentDocument"第四章安卓數(shù)據(jù)庫(kù)設(shè)計(jì) 12\o"CurrentDocument"數(shù)據(jù)庫(kù)及字段屬性 12字段設(shè)計(jì) 12音樂(lè)播放器E-R圖 13\o"CurrentDocument"數(shù)據(jù)庫(kù)連接 14創(chuàng)建數(shù)據(jù)庫(kù) 14操作數(shù)據(jù)庫(kù) 15數(shù)據(jù)顯示 16\o"CurrentDocument"第五章播放器系統(tǒng)功能的實(shí)現(xiàn) 16\o"CurrentDocument"播放器主界面功能實(shí)現(xiàn) 16主界面顯示 16\o"CurrentDocument"播放器的播放、暫停、歌詞播放等功能 18\o"CurrentDocument"播放列表顯示 20\o"CurrentDocument"播放界面實(shí)現(xiàn) 22\o"CurrentDocument"歌詞顯示 23\o"CurrentDocument"手機(jī)擴(kuò)展卡的訪問(wèn) 24\o"CurrentDocument"第六章系統(tǒng)測(cè)試 25\o"CurrentDocument"第七章心得與總結(jié) 26第一章引言選題目的及意義當(dāng)今社會(huì)的生活節(jié)奏越來(lái)越快,人們對(duì)手機(jī)的要求也越來(lái)越高,由于手機(jī)市場(chǎng)發(fā)展迅速,使得手機(jī)操作系統(tǒng)也出現(xiàn)了不同各類(lèi),現(xiàn)在的市場(chǎng)上主要有三個(gè)手機(jī)操作系統(tǒng)有塞班S6Rwp7、IOS以及谷歌的Android操作系統(tǒng),其中占有開(kāi)放源代碼優(yōu)勢(shì)的Android系統(tǒng)有最大的發(fā)展前景。那么能否在手機(jī)上擁有自己編寫(xiě)的個(gè)性音樂(lè)播放器,為個(gè)人喜好來(lái)設(shè)計(jì)播放器的界面和布局來(lái)娛樂(lè)自己?能的,Android系統(tǒng)就能做到。本文的音樂(lè)播放器就是基于Android手機(jī)平臺(tái)編寫(xiě)的播放器。項(xiàng)目背景隨著計(jì)算機(jī)的廣泛運(yùn)用,手機(jī)市場(chǎng)的迅速發(fā)展,各種音頻視頻資源也在網(wǎng)上廣為流傳,這些資源看似平常,但已經(jīng)漸漸成為人們生活中必不可少的一部分了。于是各種手機(jī)播放器也緊跟著發(fā)展起來(lái), 但是很多播放器一味追求外觀花哨,功能龐大,對(duì)用戶的手機(jī)造成了很多資源浪費(fèi),比如CPU內(nèi)存等的占用率過(guò)高,在用戶需要多任務(wù)操作時(shí),受到了不小的影響,帶來(lái)了許多不便,而對(duì)于大多數(shù)普通用戶,許多功能用不上,形同虛設(shè)。針對(duì)以上各種弊端,選擇了開(kāi)發(fā)多語(yǔ)種的音頻視頻播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶(如聽(tīng)歌,看電影)的需求,除了能播放常見(jiàn)格式的語(yǔ)音視頻文件,高級(jí)功能:還能播放RMV臍式的視頻文件。止匕外,還能支持中文、英文等語(yǔ)言界面。要研究了各種市場(chǎng)上流行的手機(jī)播放器,了解它們各自的插件及編碼方式,還有各種播放器播放的特別格式文件,分析各種編碼的優(yōu)缺點(diǎn)以及各種播放器本身存在的缺陷和特點(diǎn),編寫(xiě)出功能實(shí)用,使用方便快捷的播放器。目前已經(jīng)實(shí)現(xiàn)的功能有能播放常見(jiàn)音頻文件的功能,如MP3WAW,擁有播放菜單,能選擇播放清單,具備一般播放器的功能,如快進(jìn),快退,音量調(diào)節(jié)等。播放模式也比較完善,有單曲,順序,循環(huán),隨機(jī)播放等模式。第二章系統(tǒng)需求分析功能需求根據(jù)項(xiàng)目的目標(biāo),我們可獲得項(xiàng)目系統(tǒng)的基本需求,以下從不同角度來(lái)描述系統(tǒng)的需求,并且使用用例圖來(lái)描述,系統(tǒng)的功能需求,我們分成四部分來(lái)概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器擴(kuò)展卡需求。以例圖表示以下分別描述:播放器控制需求功能需求定義了開(kāi)發(fā)人員必須實(shí)現(xiàn)的軟件功能。 用戶需求文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù)。本軟件主界面用戶功能控制需求有播放、暫停、停止、界面歌詞顯示。當(dāng)用戶需要對(duì)特定某首歌曲進(jìn)行操作時(shí),播放器提供的功能有播放、詳細(xì)屬性、加入鈴聲庫(kù)、增加歌曲、從播放器音樂(lè)列表移除、把全部歌曲從音樂(lè)列表中移除、進(jìn)入設(shè)定界面功能。播放器擴(kuò)展卡需求播放器擴(kuò)展卡需求是用戶對(duì)播放器音樂(lè)對(duì)手機(jī)的文件瀏覽器的需求。文件瀏覽器可以搜尋手機(jī)音樂(lè)、SD卡音樂(lè)。目標(biāo)是手機(jī)和內(nèi)存卡上的mp3格式的音樂(lè)文件。系統(tǒng)界面需求用戶界面是一個(gè)應(yīng)用程序很重要的一面一一它直接影響程序的使用價(jià)值。對(duì)于大多數(shù)用戶來(lái)說(shuō),用戶界面就是他們對(duì)一個(gè)產(chǎn)品的大致的了解。所以對(duì)他們來(lái)說(shuō),一個(gè)內(nèi)部設(shè)計(jì)良好但用戶界面不好的應(yīng)用程序就是一個(gè)不好的程序0說(shuō)到底一句話:一個(gè)優(yōu)秀的用戶界面即是一個(gè)直觀的、對(duì)用戶透明的界面:用戶在首次接觸了這個(gè)軟件后就覺(jué)得一目了然,不需要多少培訓(xùn)就可以方便地上手使用,而且用戶在使用過(guò)程中甚至?xí)@得愉悅快樂(lè)的心情。說(shuō)起來(lái)很簡(jiǎn)單,可是在實(shí)際開(kāi)發(fā)中,真正能夠做到這一點(diǎn)卻很不容易的。為了減少工作量本播放器界面為個(gè)人項(xiàng)目設(shè)計(jì)素材。播放器主界面如圖2.5所示:圖2.5系統(tǒng)性能需求根據(jù)Android手機(jī)系統(tǒng)要求無(wú)響應(yīng)時(shí)間為5秒,所以就有如下性能要求:TOC\o"1-5"\h\z當(dāng)要求歌曲播放時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過(guò) 5秒當(dāng)要求歌曲暫停時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過(guò) 5秒當(dāng)要求歌曲停止時(shí),程序響應(yīng)時(shí)間最長(zhǎng)不能超過(guò) 5秒運(yùn)行環(huán)境需求操作系統(tǒng):Android手機(jī)基于Linux操作系統(tǒng)版本支持環(huán)境:Android2.2-4.0.0版本開(kāi)發(fā)環(huán)境:Eclipse8.6ADT0.95第三章安卓項(xiàng)目介紹安卓簡(jiǎn)介及優(yōu)點(diǎn)安卓簡(jiǎn)介Android一詞的本義指“機(jī)器人”,如上圖3.1所示。同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。Android是基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),早期由Google開(kāi)發(fā)(在華注冊(cè)商標(biāo)名為“安致”),后由開(kāi)放手機(jī)聯(lián)盟(OpenHandsetAlliance)開(kāi)發(fā)。它采用了軟件堆層(softwarestack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開(kāi)發(fā),以Java作為編寫(xiě)程序的一部分。另外,為了推廣此技術(shù), Google和其它幾十個(gè)手機(jī)公司建立了開(kāi)放手機(jī)聯(lián)盟。2010年10月份,谷歌宣布Android系統(tǒng)達(dá)到了第一個(gè)里程碑,即電子市場(chǎng)上獲得官方數(shù)字認(rèn)證的Android應(yīng)用數(shù)量已經(jīng)達(dá)到了10萬(wàn)個(gè),Android系統(tǒng)的應(yīng)用增長(zhǎng)非常迅速。在2010年12月,谷歌正式發(fā)布了Android2.3操作系統(tǒng)Gingerbread(姜餅)。2011年1月,谷歌稱每日的Android設(shè)備新用戶數(shù)量達(dá)到了30萬(wàn)部,到2011年7月,這個(gè)數(shù)字增長(zhǎng)到55萬(wàn)部,而Android系統(tǒng)設(shè)備的用戶總數(shù)達(dá)到了1.35億,Android系統(tǒng)已經(jīng)成為智能手機(jī)領(lǐng)域占有量最高的系統(tǒng)。2011年8月2日,Android手機(jī)已占據(jù)全球智能機(jī)市場(chǎng)48%勺份額,并在亞太地區(qū)市場(chǎng)占據(jù)統(tǒng)治地位,終結(jié)了Symbian(塞班系統(tǒng))的霸主地位,躍居全球第一。2011年9月份,Android系統(tǒng)的應(yīng)用數(shù)目已經(jīng)達(dá)到了48萬(wàn),而在智能手機(jī)市場(chǎng),Android系統(tǒng)的占有率已經(jīng)達(dá)到了43%繼續(xù)在排在移動(dòng)操作系統(tǒng)首位。在本月19號(hào),谷歌將會(huì)發(fā)布全新的Android4.0操作系統(tǒng),這款系統(tǒng)被谷歌命名為IceCreamSandwich(冰激凌三明治)。2012年1月6日,谷歌AndroidMarket已有10萬(wàn)開(kāi)發(fā)者推出超過(guò)40萬(wàn)活躍的應(yīng)用,大多數(shù)的應(yīng)用程序?yàn)槊赓M(fèi)。 AndroidMarket應(yīng)用程序商店目錄在新年首周周末突破40萬(wàn)基準(zhǔn),距離突破30萬(wàn)應(yīng)用僅4個(gè)月。而在2011年早些時(shí)候,AndroidMarket從20萬(wàn)增加到30萬(wàn)應(yīng)用也花了四個(gè)月。安卓?jī)?yōu)點(diǎn)Andriod有如下八大優(yōu)點(diǎn):(1)應(yīng)用程序框架支持組件的重用與替換Dalvik虛擬機(jī)專門(mén)為移動(dòng)設(shè)備做了優(yōu)化(3)內(nèi)部集成瀏覽器該瀏覽器基于開(kāi)源的WebKit引擎(4)優(yōu)化的圖形庫(kù)包括2D和3D圖形庫(kù),3D圖形庫(kù)基于OpenGLESSQLite用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)(5)多媒體支持包括常見(jiàn)的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)(6)GSMfe話(依賴于硬件)藍(lán)牙Bluetooth,EDGE,3G,andWiFi(依賴于硬件)照相機(jī),GPS指南針,和加速度計(jì) (依賴于硬件)(7)豐富的開(kāi)發(fā)環(huán)境包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開(kāi)發(fā)環(huán)境插件搭建安卓開(kāi)發(fā)環(huán)境任何事物要運(yùn)行,都要有它的環(huán)境,Android也有它的環(huán)境才能夠運(yùn)行,下面介紹Android的開(kāi)發(fā)環(huán)境配置。搭建開(kāi)發(fā)環(huán)境需要的軟件有:操作系統(tǒng):Windows軟件包:AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDeveloopmentTool)IDE環(huán)境:EclipseIDE+ADTEclipse2.3以上JDKJavaRuntimeEnvironment虛擬機(jī)、(JDK)JavaDevelopmentkit安裝步驟如下:第一步:安裝Java虛擬機(jī)sun-java6-jdk版本第二步:安裝Eclipse8.6工具官網(wǎng)/downloads/第三步:安裝AndroidSDK:首先要下載 SDK可以在這個(gè)網(wǎng)址下載Http:///sdk,選擇相應(yīng)的系統(tǒng)進(jìn)行安裝.如3.3所示:第四步:安裝AndroidADT插件運(yùn)行Eclipse,選擇help->installnewsoftware 選擇add,將會(huì)彈出一個(gè)對(duì)話框,點(diǎn)擊OK選擇要安裝的軟件,占next,然后選擇接受協(xié)議,直到安裝成功,重啟Eclipse軟件,設(shè)置AndroidSDKHomeWindow->refrence在SDKlocation中輸入SDKTools路徑:D:\androidsoftware\android-sdk-windows點(diǎn)擊OK!/¥Android環(huán)境就已經(jīng)搭建成功了。Andriod 音樂(lè)播放器項(xiàng)目工程設(shè)計(jì)Andriod項(xiàng)目Android的四大基本組件: Activity( 活動(dòng)),Service(服務(wù)),BroadcastReceiver(廣播),ContentProvider(內(nèi)容提供者),各組件之間要進(jìn)行切換需要一個(gè)意圖或企圖Intent類(lèi),通過(guò)啟動(dòng)StartIntent()方法來(lái)使各組件進(jìn)行跳轉(zhuǎn)。Android的五大布局方式:LinearLayout(線性布局)FrameLayout(幀布局)TableLayout(表格布局)AbsoluteLayout(絕對(duì)布局)RelativeLayout(相對(duì)布局)。五種布局方式可以相互嵌套,Android各種漂亮的界面都是通過(guò)嵌套布局而實(shí)現(xiàn)的。Android的線程,以及線程之間通信的中介: Handler類(lèi)Android數(shù)據(jù)庫(kù):在第三章已經(jīng)介紹過(guò)了。這里不再介紹Android配置文件:AndroidManifest.Xml及res資源文件中各種屬性布局方式引用的資源等Android系統(tǒng)將插件AD磔成至U了Eclipse工具上,因此,一個(gè)Android程
序啟動(dòng)后,系統(tǒng)會(huì)啟動(dòng)一個(gè)模擬器(Emulator)如下圖3.5:5554:2,2圖3.5Andriod工程程序設(shè)計(jì)Android工程基本結(jié)構(gòu)目錄包括:src(源代碼)、gen(Android系統(tǒng)自動(dòng)生成的常量)、Res(資源文件):主要存放程序界面的布局配置(.xml)文件和圖片資源。AndroidMainfes.xml 是四大組件的驅(qū)動(dòng)配置文件,有它的存在,Android程序的四大組件才可以正常的跳轉(zhuǎn)。下圖3.6是音樂(lè)播放器代碼結(jié)構(gòu):
k^ck: niera?占Mp3Player01黃src[>落gen[GeneratedJavaFBAndroid2,2assetsbinr&5■rAndroidManifest.xmlproguard-prqject.txt國(guó)perties圖3.6圖3.6內(nèi)容為該播放器的.Java文件、播放器所用到的字符串,字體大小、字的顏色等配置文件、該播放器的各種界面的布局配置文件及該播放器的圖片資源,如圖3.7所示:beginJcoic_launcher<png^au^e.ico5top.icobeginJcoic_launcher<png^au^e.ico5top.ico圖.AndroidManifest.xml文件Android系統(tǒng)的任何一個(gè)程序啟動(dòng)都需要AndroidManifest.xml 來(lái)啟動(dòng)程序,任何一個(gè)新建的工程目錄都會(huì)自動(dòng)生成一個(gè) AndroidManifest.xml文件,此配置文件是整個(gè)程序能夠正常運(yùn)行的核心,它里面包含了 AndroidSDK的版本,程序運(yùn)行的默認(rèn)Activity,當(dāng)程序中的任何一個(gè)組件觸發(fā)事件后, 系統(tǒng)都會(huì)自動(dòng)Android的去AndroidManifest.xml 中尋找標(biāo)識(shí)來(lái)作出相應(yīng)的操作。任何一個(gè)AndroidManifest.xml文件的格式都應(yīng)為:<?xmlversion="1.0"encoding="utf-8"?><manifest><application><activity><intent-filter><action/><category/></intent-filter></activity></application><uses-sdk/><uses-permission/></manifest>Android系統(tǒng)有一個(gè)編碼的規(guī)定,支持的編碼是"utf-8",當(dāng)程序中出現(xiàn)亂碼是,我們須將其編碼格式轉(zhuǎn)化為"utf-8".在AndroidManifest.xml中會(huì)在第一行聲明一句:<?xmlversion="1.0"encoding="utf-8"?>。它是該系統(tǒng)支持的版本和編碼。在第二行定義了我們需要使用的架構(gòu),該架構(gòu)來(lái)自xmlns:android="http:〃/apk/res/android"xmlns(XMLnamespace)是一個(gè)命名空間。在application 元素我們定義android:icon="@drawable/icon”android:label="@string/app_name",android:ico是程序在手機(jī)中顯示的圖片,我們運(yùn)用@drawable/icon表示了對(duì)res/drawable目錄下的ic_launcher.png的弓I用。@string/app_name表示了對(duì)res/value目錄下string.Xml中定義的app_nam辱數(shù)的弓I用。<activityandroid:name=".PlayRackActivity”〉<intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity>這是系統(tǒng)確定的首先要啟動(dòng)的Activity是PlayRackActivity。過(guò)濾器intent-filter 有兩種啟動(dòng)方式來(lái)啟動(dòng)界面:(1)顯示方式顯示方式是在代碼中的直接啟動(dòng)組件,啟動(dòng)時(shí)會(huì)聲明Intent,在它的構(gòu)造方法Intent(組件1,組件2)中直接指定一個(gè)組件的名字,然后調(diào)用方法startIntent(intent) 以啟動(dòng)指定的組件。(2)隱式方式隱式方式是通過(guò)過(guò)濾器來(lái)過(guò)濾完成的,啟動(dòng)的組件必須滿足 action和category的條件才能夠啟動(dòng)該組件。這些屬性是在AndroidManifest.Xml文件中聲明的。兩種啟動(dòng)方式都可以通過(guò)程序 setAction(ACTION^量)和startActivity(intent)或配置文件兩種方式來(lái)實(shí)現(xiàn)組件的跳轉(zhuǎn)。第四章安卓數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)組織和數(shù)據(jù)庫(kù)文件設(shè)計(jì)要根據(jù)不同用途, 使用要求等,來(lái)決定數(shù)據(jù)的整體組織形式等一系列問(wèn)題。數(shù)據(jù)庫(kù),顧名思義,是存放數(shù)據(jù)的倉(cāng)庫(kù)。只不過(guò)這個(gè)倉(cāng)庫(kù)是在計(jì)算機(jī)存儲(chǔ)設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定數(shù)據(jù)模型組織、描述和存儲(chǔ),具有較小的重復(fù)度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并且可以被在一定范圍內(nèi)的各種用戶共享。在涉及數(shù)據(jù)庫(kù)的軟件開(kāi)發(fā)中,需要根據(jù)有待解決的問(wèn)題性質(zhì)、規(guī)模,以及所采用的前端程序創(chuàng)建工具等, 做出合適的數(shù)據(jù)庫(kù)類(lèi)型選擇。數(shù)據(jù)庫(kù)及字段屬性字段設(shè)計(jì)file_table 主要是保存歌曲名字、類(lèi)型、路徑字段說(shuō)明:Id歌曲id號(hào)fileName歌曲名字filePath 歌曲路徑sort歌曲類(lèi)型(表4.1、圖4.2)屬性數(shù)據(jù)類(lèi)型允許空主鍵_IdINTEGERNotnullPrimarykeyfileNameTEXTNotnullfilePathTEXT
sortINTEGER表4.1列名數(shù)據(jù)類(lèi)型長(zhǎng)度字段描述_Idinteger5編p,主鍵groupidinteger5組編號(hào)Music-idinteger5歌曲編號(hào)表4.2Android自帶一個(gè)MediaStore封閉類(lèi)專門(mén)來(lái)存儲(chǔ)媒體信息通過(guò)UriEXTERNALCONTENTU用訪問(wèn)SDcard中的歌曲詳細(xì)信息圖4.3MP3下載列表5554:2.2mp3playerLQ口Ipan,mp34207M2m2,mp341940525554:2.2mp3playerLQ口Ipan,mp34207M2m2,mp341940521234567M8910QWERTY_UI0pASDfJG史HJKL0EL|<X1管ZXCVBNM*WH5YML—J</r音樂(lè)播放器E-R圖音樂(lè)播放器E-R(實(shí)體-聯(lián)系:entity-relation圖),歌曲的信息有歌曲名字、發(fā)行年份、流派名稱、專輯名稱、藝術(shù)家名稱、曲目號(hào)碼。歌曲的排列形成播放列表。列表有自己的編號(hào),同時(shí)也給組成列表的歌曲名字分配編號(hào)。數(shù)據(jù)庫(kù)連接這里將介紹如何進(jìn)行Android數(shù)據(jù)庫(kù)連接,Android中自帶SQUte數(shù)據(jù)庫(kù),這是一個(gè)十分小型的數(shù)據(jù)庫(kù),這樣正適合 Android這種移動(dòng)平臺(tái)使用。Android數(shù)據(jù)庫(kù)存儲(chǔ)的位置在data/data/<項(xiàng)目文件夾>/databases/目錄下。Android是利用ContentProvider作為內(nèi)容提供商,SQLiteOpenHelper數(shù)據(jù)庫(kù)幫助類(lèi)來(lái)進(jìn)行對(duì)數(shù)據(jù)庫(kù)的創(chuàng)建和操作。通過(guò)Context.getContentResolver()方法直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。程序中數(shù)據(jù)庫(kù)類(lèi)為 DBHelperextendsSQLiteOpenHelper(繼承關(guān)系),內(nèi)容提供類(lèi)DBProviderextendsContentProvider(繼承關(guān)系)。創(chuàng)建數(shù)據(jù)庫(kù)Android提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)創(chuàng)建方式。繼承SQLiteOpenHelper,實(shí)現(xiàn)onCreate和onUpgrade兩個(gè)方法,有個(gè)好處就是便于數(shù)據(jù)庫(kù)版本的升級(jí), 連接數(shù)據(jù)庫(kù)的算法如下:publicDBHelper(Contextcontext){// 創(chuàng)建數(shù)據(jù)庫(kù)super(context,DATABASE_NAME,null,DATABASE_VERSION);}publicvoidonCreate(SQLiteDatabasedb){//創(chuàng)建時(shí)調(diào)用db.execSQL(DATABASE_CREATE);}publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){//版本更新時(shí)調(diào)用db.execSQL("DROPTABLEIFEXISTSFile_Table");onCreate(db);}@Override//在ContextProvider運(yùn)行時(shí)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)publicbooleanonCreate(){dbOpenHelper=newDBHelper(getContext());returntrue;數(shù)據(jù)庫(kù)如果創(chuàng)建不成功則拋出FIleNotFoundException異常操作數(shù)據(jù)庫(kù)Android對(duì)數(shù)據(jù)庫(kù)的操作主要有插入、刪除、更新、查詢操作,在進(jìn)行任何操作時(shí)都必須指定一個(gè)Uri,才能對(duì)相應(yīng)的表進(jìn)行數(shù)據(jù)操作。//數(shù)據(jù)庫(kù)刪除操作@Overridepublicintdelete(Uriarg0,Stringarg1,String口arg2){SQLiteDatabasedb=dbOpenHelper.getWritableDatabase();try{Db.delete(FileColumn.TABLE,arg1,arg2);}catch(Exceptionex){ex.printStackTrace();}return1;@Override//數(shù)據(jù)庫(kù)插入操作publicUriinsert(Uriuri,ContentValuesvalues){SQLiteDatabasedb=dbOpenHelper.getWritableDatabase();longcount=0;try{count=db.insert(FileColumn.TABLE,null,values);}catch(Exceptionex){ex.printStackTrace();}if(count>0)returnuri;elsereturnnull;
4.2.3.數(shù)據(jù)顯示4.2.3.數(shù)據(jù)顯示程序是利用Cursor游標(biāo)類(lèi)指向數(shù)據(jù)表中的某一項(xiàng),然后進(jìn)行查詢數(shù)據(jù),用Log日志顯示出來(lái)。@Override//數(shù)據(jù)庫(kù)查詢操作publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder){SQLiteDatabasedb=dbOpenHelper.getWritableDatabase();//依次參數(shù)為:表名,查詢字段, where語(yǔ)句,替換,groupby(分組),having(分組條件),orderby( 排序)Cursorcur=db.query(FileColumn.TABLE,projection,selection,selectionArgs,null,null,sortOrder);returncur;}第五章播放器系統(tǒng)功能的實(shí)現(xiàn)播放器主界面功能實(shí)現(xiàn)主界面是用戶使用軟件的的第一個(gè)視野圖,也是用戶對(duì)軟件風(fēng)格的第一印象圖,很大影響用戶對(duì)使用軟件的評(píng)價(jià),尤為重要。主界面顯示播放器主界面如圖5.1所示:圖5.1Android的每一個(gè)可視化界面,都有其的唯一的布局配置文件,該文件里面有各種布局方式,和各種資源文件如圖像,文字,顏色的引用,程序在運(yùn)行時(shí),可以通過(guò)代碼對(duì)各配置文件進(jìn)行讀取。這樣就可以形成不同的可視化界面和炫麗的效果。播放器主界面是一個(gè)Activity,Android工程在每個(gè)activity啟動(dòng)的時(shí)候會(huì)首先執(zhí)行Oncreate()方法,如下代碼:@OverridePublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedlnstanceState);setContentView(R.layout.play_rack);}該方法主要執(zhí)行界面白^初始化操作, Activity有個(gè)設(shè)置布局的方法:Context.setContentView(layoutResID)參數(shù)為資源ID,該Id在工程目錄res/layout下,主界面布局文件名為play_rack。下面為play_rack.xml布局文件代碼結(jié)構(gòu)如下:<?xmlversion="1.0"encoding="utf-8"?><AbsoluteLayout><LinearLayout></LinearLayout><SeekBar></SeekBar><LinearLayout></LinearLayout></AbsoluteLayout>在絕對(duì)布局<AbsoluteLayout>下嵌套兩種線性布局<LinearLayout>和<SeekBar>,第一個(gè)<LinearLayout>實(shí)現(xiàn)了標(biāo)題和歌曲名的顯示位置,通過(guò)<AbsoluteLayout>^M?H<LinearLayout^^fi對(duì)坐標(biāo)來(lái)控制標(biāo)題的位置。每個(gè)布局內(nèi)可以放置多種Widget(窗體部件)例如:<TextView><ImageButton>lro每個(gè)Widget內(nèi)有多種屬性,可以設(shè)置該Widget的坐標(biāo),大小,背景和顏色等參數(shù)。在播放界面中,歌詞顯示為居中,實(shí)現(xiàn)方法代碼如下:<LinearLayoutandroid:orientation="horizontal”android:gravity="center"android:layout_height="wrap_content”android:layout_width="fill_parent"><TextViewandroid:layout_height="wrap_content”android:textColor="#8deeee"android:id="@+id/lrcText”android:layout_width="wrap_content"></TextView></LinearLayout>屬性:orientation="horizontal":此線性布局的子部件為水平方式布局Layout_width="fill_content":布局的寬度為填滿父布局Layout_height="wrap_content”:布局的高度子由窗體的大小決定窗體TextView文本:textColor="8deeee”設(shè)置文本顯示的顏色RGB為"8deeee"TextSize為默認(rèn)大小播放器的播放、暫停、歌詞播放等功能播放器主界面功能有播放、暫停、停止、進(jìn)入列表功能,如圖5.3所示:圖5.3配置文件代碼結(jié)構(gòu)如下:<LinearLayout><ImageButton></ImageButton><ImageButton></ImageButton><ImageButton></ImageButton><ImageButton></ImageButton><ImageButton></ImageButton></LinearLayout>android的媒體播放原理:android源程序已經(jīng)為我們封裝好了一個(gè)接口類(lèi),叫MediaPlayer。該接口在執(zhí)行行需要一個(gè)數(shù)據(jù)源,通過(guò)如下四個(gè)步驟:第一步:MediaPlayer.reset();復(fù)位操作,為以后的媒體準(zhǔn)備播放作準(zhǔn)備。:第二步:傳入歌曲數(shù)據(jù)源,這里也是一個(gè)數(shù)據(jù)流MediaPlayer.setDataSource(Stringpath);參數(shù)需要傳一個(gè)路徑,該接口類(lèi)在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。第三步:準(zhǔn)備播放數(shù)據(jù)源,調(diào)用方法MediaPlayer.Prepare();第四步:MediaPlayer.Start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再與程序有關(guān),需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start();讓其啟動(dòng);歌曲數(shù)據(jù)源的獲得:要獲得數(shù)據(jù)源,需要我們提供給接口類(lèi)一個(gè)歌曲存放路徑,而這個(gè)路徑已經(jīng)被事先放到數(shù)據(jù)庫(kù)里了,我們只需要進(jìn)行數(shù)據(jù)庫(kù)進(jìn)行操作。將里面的路徑取出。這里將調(diào)用PlayRackActivity 的一個(gè)方法query();代碼算法如下:publicStringquery(){ContentResolvercr=getContentResolver();Uriuri=DBProvider.CONTENT_URI;String[]projection={"path"};Stringselection="fileName=?";String[]selectionArgs={selectName};Cursor c=cr.query(uri,projection,selection,selectionArgs,null);if(c.moveToFirst()){Stringpath=c.getString(0);returnpath;}returnnull;}方法getContentResolver是包android.content.ContextWrapper里面的方法,它會(huì)自動(dòng)的調(diào)用ContentProvider中的關(guān)聯(lián)數(shù)據(jù)庫(kù),我們需用這個(gè)方法就可以操作數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)操作需要一個(gè)Uri。Uri類(lèi)似一個(gè)網(wǎng)絡(luò)連接的Url。Uri是數(shù)據(jù)庫(kù)唯一的標(biāo)識(shí),不同的Uri可以操作不同的數(shù)據(jù)庫(kù)表。在查詢數(shù)據(jù)庫(kù)時(shí)需要傳入一個(gè)當(dāng)前播放的歌曲名字,通過(guò)歌曲名字來(lái)查詢歌曲的路徑。播放列表顯示播放列表顯示如圖5.4所示:5554:2,25554:2,2砧RDe6:55awImp3playerjs3n.mpBLqrI3.58Mmp3playerjs3n.mpBLqrI3.58M圖5.4在Android里面,有一個(gè)視圖叫ListView,其特點(diǎn)是一個(gè)有BaseAdapter的屬性,從下到下,或從左到右的顯示方式。系統(tǒng)默認(rèn)的方式每一行只顯示一個(gè)TextView,本播放列表實(shí)現(xiàn)了自定義的方式, 剛ListView的每一行顯示一個(gè)音樂(lè)圖片和一個(gè)歌曲名字。我們定義一個(gè)類(lèi)MusicAdapter繼承了BaseAdapter,然后通過(guò)算法對(duì)這個(gè)適配器進(jìn)行擴(kuò)展,擴(kuò)展成為第一行能顯示一張圖片和一個(gè)歌曲名字。由于BaseAdapter是一個(gè)抽象類(lèi),我們需要實(shí)現(xiàn)里面的抽象方法getView()。該方法返回一個(gè)View,即視圖。視圖可以顯示在Activity上,所以就可以看到我們想要的歌曲列表界面。ListView同樣有一個(gè)監(jiān)聽(tīng)器newonItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){}} ,我們只要實(shí)現(xiàn)這個(gè)方法,就可以監(jiān)聽(tīng)鼠標(biāo)的點(diǎn)擊事件,當(dāng)鼠標(biāo)點(diǎn)擊到每一行時(shí),可以通過(guò)ListView.getItemAtPositon(intposition)得到該行上的信息。這樣就可以通過(guò) Intent將數(shù)據(jù)傳入到其它的Activity。本程序的思路是當(dāng)鼠標(biāo)點(diǎn)擊一行,會(huì)跳轉(zhuǎn)到另一個(gè) Activity里面,這個(gè)Activity和歌曲列表類(lèi)似,也是一個(gè)ListView。播放界面實(shí)現(xiàn)播放界面的實(shí)現(xiàn)如圖5.6所示:圖5.6配置文件setting.Xml布局結(jié)構(gòu)如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayout><RadioGroup><RadioButton></RadioButton><RadioButton></RadioButton><RadioButton></RadioButton></RadioGroup></LinearLayout><ToggleButton/><AbsoluteLayout><ImageButton/><ImageButton/>
</AbsoluteLayout>最外層的LinearLayout里面嵌套多層LineaLayout,子LinearLayout里面嵌套著單選按鈕RatioGroup和開(kāi)關(guān)按鈕ToggleButton。RatioGroup里面嵌套著3個(gè)RatioButton,即界面上顯示的(單曲循環(huán)、隨機(jī)播放、順序播放)。歌詞顯示歌詞顯示界面如圖5.7所示5554:2,2lillmp3prayer說(shuō)你去永遠(yuǎn)晤著我■125554:2,2lillmp3prayer說(shuō)你去永遠(yuǎn)晤著我■1234167890QWERTYUI0PA5DFGHJK1LDEL舍ZXCVBNM*SYM@**/圖5.7歌詞的播放以自下向上的滾動(dòng)方式進(jìn)行。播放模式狀態(tài)和歌詞顯示狀態(tài)的操作結(jié)果都將以一個(gè)標(biāo)志,被寫(xiě)在一個(gè)配置文件中。本播放器以歌詞格式.Lrc的文件。我們查看.Lrc文件中的歌詞格式為:[00:16.18]Inthewall即是以“時(shí)間+歌詞”的格式存儲(chǔ)。Lrc中的歌詞讀取出來(lái)并存儲(chǔ)在Android的配文件中我們可以看到一個(gè)目錄為sdcard,該目錄即為擴(kuò)展卡,里面預(yù)先存放著音頻文件和.Lrc歌詞文件,我們定義一個(gè)BufferedReaderbuffer=newBufferedReader(newFileReader(newFile("/sdcard/"+musicName+".lrc")));指定.Lrc文件存在的路徑,并將文件讀取到BufferReader中。由于我們要分別存放時(shí)間和歌詞,所以我們應(yīng)I定義兩個(gè)List<String>容器來(lái)存放時(shí)間和歌詞。在讀取lrc時(shí),每次讀取一行,再用算法將時(shí)間和歌詞分開(kāi)后放到一個(gè)數(shù)組里面,并分別存放在兩個(gè)list中。由于歌曲在播放時(shí)會(huì)存在界面之間的跳轉(zhuǎn),所以歌詞必須固定存放在一個(gè)文件中, 而不能作為一個(gè)對(duì)象,因此,我們將兩個(gè)時(shí)間List和歌詞List再寫(xiě)進(jìn)一個(gè)配置文件中.Android提供給我們一個(gè)共享文件的類(lèi)SharedPreferences。它有一個(gè)方法getSharedPreferences(參數(shù)1,參數(shù)2),參數(shù)1為寫(xiě)進(jìn)時(shí)的標(biāo)記,便于在從其中讀取出來(lái)時(shí)的標(biāo)記,參數(shù)2為讀取模式,有只寫(xiě)模式(MODE_WORLD_WRITEABLE和只讀模式(MODE_WORLD_READABLE之前將其置入編輯狀態(tài),用靜態(tài)方法SharedPreferences.Editoreditor=sp.edit();然后對(duì)象editor可以存入——個(gè)HashMap<key,values>類(lèi)型的鍵值,即putString(KEY,VALUE
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 雙碳目標(biāo)下京津冀地區(qū)新能源協(xié)同規(guī)劃模型研究
- 用于介電常數(shù)檢測(cè)的平面電容傳感器研究與設(shè)計(jì)
- BnMYBL2-1基因在響應(yīng)植物干旱脅迫中的功能分析
- 合伙債務(wù)合同范本
- 科技創(chuàng)新助力企業(yè)發(fā)展
- 教師的個(gè)人簡(jiǎn)介范文200字(27篇)
- 設(shè)計(jì)合同跟施工合同范本
- 德姆尼茲《單簧管基礎(chǔ)教程》音樂(lè)教育理念研究
- 中外女子沙灘排球運(yùn)動(dòng)員攻防能力特征研究
- 腸炎沙門(mén)菌Dam和TcpS調(diào)控巨噬細(xì)胞代謝重編程抑制炎性反應(yīng)的分子機(jī)制
- 全面介紹現(xiàn)貨中遠(yuǎn)期交易
- 公安系防暴安全03安檢
- 四年級(jí)下冊(cè)音樂(lè)課件第一課時(shí)-感知音樂(lè)中的旋律三
- 教科版 二年級(jí)下冊(cè)科學(xué)教學(xué)計(jì)劃
- 部編版六年級(jí)道德與法治下冊(cè)《學(xué)會(huì)反思》教案
- 人教版體育與健康四年級(jí)-《障礙跑》教學(xué)設(shè)計(jì)
- DB32-T 2860-2015散裝液體化學(xué)品槽車(chē)裝卸安全作業(yè)規(guī)范-(高清現(xiàn)行)
- 部編版四年級(jí)下冊(cè)語(yǔ)文教案(完整)
- T∕CIS 71001-2021 化工安全儀表系統(tǒng)安全要求規(guī)格書(shū)編制導(dǎo)則
- 福利院裝修改造工程施工組織設(shè)計(jì)(225頁(yè))
- 環(huán)境空氣中臭氧的測(cè)定
評(píng)論
0/150
提交評(píng)論