版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì)說明書(畢業(yè)論文)PAGEI內(nèi)蒙古科技大學(xué)本科生畢業(yè)設(shè)計(jì)說明書(畢業(yè)論文)題目:基于Android系統(tǒng)的MIDI音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)
摘要隨著3G時(shí)代的來臨,3G、Android、iPhone、Google、蘋果、手機(jī)軟件、移動開發(fā)等詞越來越充斥于耳。隨著3G網(wǎng)絡(luò)的大規(guī)模建設(shè)和智能手機(jī)的迅速普及,移動互聯(lián)網(wǎng)時(shí)代已經(jīng)微笑著迎面而來。自1983年世界第一款商用手機(jī)發(fā)布到現(xiàn)在,只經(jīng)過了僅僅不到30年的時(shí)間,全球手機(jī)用戶已達(dá)23億之多。消費(fèi)者對手機(jī)產(chǎn)品在商務(wù)和娛樂方面的要求越來越高,讓手機(jī)日益成為便攜式的商務(wù)或娛樂終端。在硬件的推動下,用戶對手機(jī)軟件的功能需求也越來越高。Android系統(tǒng)也在不斷更新以滿足需求,因此手機(jī)多媒體技術(shù)的開發(fā)也就不可避免稱為熱點(diǎn)。Android:Google公司于2007年公布的開放式源代碼手機(jī)系統(tǒng),它的開放性優(yōu)于其它封閉式的手機(jī)系統(tǒng),任何人都可能根據(jù)自己的喜好將手機(jī)系統(tǒng)中的所有功能重新編寫。這使得越來越多的人關(guān)注這個(gè)操作系統(tǒng)。本設(shè)計(jì)為一款基于Android2.2操作系統(tǒng)及以上版本的音樂播放器,以Java作為基礎(chǔ)編程語言,采用Android系統(tǒng)提供的標(biāo)準(zhǔn)數(shù)據(jù)庫SQLite進(jìn)行操作。本設(shè)計(jì)的實(shí)現(xiàn),囊括了Android大部分編程技術(shù),用其友好的用戶界面,實(shí)現(xiàn)了對音樂控制的基本功能:播放、暫停、上/下首切換、歌詞同步顯示和各種播放模式的控制(單曲、循環(huán)、隨機(jī)和順序播放),也實(shí)現(xiàn)了對歌曲列表的搜索、添加和刪除等功能。關(guān)鍵詞:Android;Google;音樂播放器;Java;移動互聯(lián)網(wǎng)AbstractWiththecomingoftheeraof3G,somewordscanbeheardmoreandmorefrequently,suchas3G,Android,iPhone,Google,Apple,Mobilephonesoftware,Mobiledevelopment.Asthe3Gnetwork’slarge-scaleconstructionandthesmartphone’srapidpopularization,mobileinternetagehascomewithasmile.Sincetheissuanceoftheworld’sfirstcommercialmobilephonein1983,thetotalnumberofglobalmobilephoneusershasbeenmorethan2.3billioninthepastlessthan30years.Consumersdemandmoreandmoremobilephone’sperformanceinbusinessandentertainment,whichhasmademobilephonetheportableterminalforbusinessandentertainmentdaybyday.Beingmotivatedbyhardware,users’needsonmobilephonesoftware’sfunctiongoesincreasinglyhigh.Androidsystemisupdatingtosatisfytheneeds.Therefore,thedevelopmentofmobilemultimediatechnologyhasinevitablybecomethehotspot.AndroidistheopensourcemobilesystempublishedbyGooglein2007.Forthereasonthatitsopennessissuperiortootherclosedmobilesystem,anyonecanrewriteallfunctionsinthemobilesystemasheorshelike,whichhasmademoreandmorepeoplepayattentiontothisoperatingsystem.ThisdesignisamusicplayerusingJavaasthebasicprogramminglanguage,whichisbasedonAndroid2.2operatingsystemandaboveversion,andcanbeoperatedbythestandarddatabaseSQLitethatofferedbyAndroidsystem.Thoughthisdesignisnotbig,itcontentsAndroid’smostprogrammingtechnology.Itsfavorableuserinterfacecanconducetotherealizationofitsbasicfunctioninmusiccontrolling(start,pause,switchingbetweenupanddownmusic,lyricssynchronizeddisplay)andplaymodecontrolling(singleplay,singlecycle,randomplayandallcycle).Besides,italsorealizesthefunctioninsongincludingsearch,add,deleteandsoon.Keywords:Android;Google;musicplayer;Java;mobileinternet
目錄摘要 IAbstract II第一章 緒論 11.1設(shè)計(jì)背景及意義 11.2Android國內(nèi)外發(fā)展的狀況 1第二章開發(fā)工具相關(guān)簡介 32.1Android概述 32.2Android開發(fā)技術(shù)簡介 42.2.1Android程序框架介紹 42.2.2用戶界面介紹 52.2.3Android四大組件簡介 62.2.4Android數(shù)據(jù)庫SQLite介紹 72.3Java語言介紹 8第三章系統(tǒng)分析 103.1可行性分析 103.1.1操作可行性 103.1.2經(jīng)濟(jì)可行性 103.1.3技術(shù)可行性 103.2設(shè)計(jì)目標(biāo) 113.3功能需求分析 123.3.1播放控制模塊分析 123.3.2歌曲列表模塊分析 133.3.2播放模式模塊分析 143.4性能需求分析 15第四章總體設(shè)計(jì) 164.1數(shù)據(jù)庫設(shè)計(jì) 164.2基本流程設(shè)計(jì) 174.2.1整體流程設(shè)計(jì) 174.2.2播放控制流程設(shè)計(jì) 174.2.3歌曲列表流程設(shè)計(jì) 184.2.4播放模式流程設(shè)計(jì) 19第五章詳細(xì)設(shè)計(jì) 205.1MIDI播放器UI設(shè)計(jì) 205.1.1歌曲列表界面設(shè)計(jì) 215.1.2播放控制界面設(shè)計(jì) 235.2播放器初始化實(shí)現(xiàn) 255.3歌曲列表模塊實(shí)現(xiàn) 275.3.1數(shù)據(jù)庫創(chuàng)建和連接實(shí)現(xiàn) 275.3.2歌曲列表搜索、添加和刪除實(shí)現(xiàn) 295.4播放控制和模式模塊實(shí)現(xiàn) 325.4.1基本控制功能實(shí)現(xiàn) 325.4.2UI同步顯示實(shí)現(xiàn) 345.4.3播放模式控制實(shí)現(xiàn) 355.5歌詞同步顯示實(shí)現(xiàn) 375.6菜單功能實(shí)現(xiàn) 42第六章系統(tǒng)測試 446.1測試引言 446.1.1測試目的 446.1.2測試信息 446.2測試內(nèi)容 456.2.1初始化測試 456.2.2歌曲列表測試 456.2.3播放控制測試 466.2.4歌詞同步顯示測試 466.2.5搜索、添加和刪除測試 47總結(jié) 48參考文獻(xiàn) 49致謝 50PAGE50緒論隨著Android手機(jī)的普及,Android應(yīng)用的需求勢必會越來越大,消費(fèi)者對手機(jī)產(chǎn)品在商務(wù)和娛樂方面的要求越來越高,讓手機(jī)日益成為便攜式的娛樂終端。其中媒體播放器也扮演著重要的角色,本設(shè)計(jì)的完成可以讓人們在忙碌的工作之余,只需一部Android手機(jī),盡情的欣賞音樂,緩解壓力。設(shè)計(jì)背景及意義現(xiàn)今社會生活緊張,而欣賞音樂是其中最好的舒緩壓力的方式之一,本項(xiàng)目的目的是開發(fā)一個(gè)可以播放主流音樂文件格式的播放器,本設(shè)計(jì)實(shí)現(xiàn)主要功能是播放Mp3格式的音樂文件,并且能夠控制播放、暫停、停止、上一曲、下一曲、音量調(diào)節(jié)、視覺外觀、播放列表的搜索、添加和刪除操作等多種播放控制功能,界面簡明,操作簡單。本項(xiàng)目是一款基于Android手機(jī)平臺的音樂播放器,使Android手機(jī)擁有個(gè)性的多媒體播放器,使手機(jī)顯得更生動靈活化,與人們更為接近,讓手機(jī)主人隨時(shí)隨地處于音樂視頻的旋律之中。使人們的生活更加多樣化。也使設(shè)計(jì)者更加熟練Android的技術(shù)和其它在市場上的特點(diǎn)。Android國內(nèi)外發(fā)展的狀況國外Android市場正在如日中天的擴(kuò)展,據(jù)市場調(diào)研機(jī)構(gòu)NPDGroup最近發(fā)布的一份報(bào)告稱,今年第一季度基于Android操作系統(tǒng)的智能手機(jī)在美國智能手機(jī)總銷量中所占比例達(dá)到28%,首度超越蘋果iPhone,蘋果iPhone約為21%,相信在不久的將來會有更多的用戶選擇Android系統(tǒng)的手機(jī)或是無線終端設(shè)備。目前中國擁有世界上最大的手機(jī)用戶群,再加上3G的推出對整個(gè)行業(yè)的巨大推動作用,全世界所有大中小型手機(jī)制造商幾乎都在招聘Android工程師。然而每天有超過16萬臺的Android設(shè)備出貨,一年后全球可能會有超過1億臺的Android設(shè)備,以后將有可能超越iPhone成為智能手機(jī)平臺的旗艦。Android在中國的前景十分廣闊,首先是有成熟的消費(fèi)者,Android社區(qū)十分紅火,這些社區(qū)為Android在中國的普及做了很好的推廣作用。國內(nèi)廠商和運(yùn)營商也紛紛加入了Android陣營,包括中國移動、中國聯(lián)通、中興通訊、華為通訊、聯(lián)想等大企業(yè),同時(shí)不僅僅局限于手機(jī),國內(nèi)廠家也陸續(xù)推出了采用Android系統(tǒng)的MID產(chǎn)品,比較著名的包括由Rockchip和藍(lán)魔推出的同時(shí)具備高清播放和智能系統(tǒng)的音悅匯W7和2010年推出的原道N5,我們可以預(yù)見Android也將會被廣泛應(yīng)用在國產(chǎn)智能上網(wǎng)設(shè)備上,將進(jìn)一步擴(kuò)大Android系統(tǒng)的應(yīng)用范圍。另一方面,由于國內(nèi)政策的限制,導(dǎo)致Android的部分功能(如Androidmarket)在國內(nèi)無法正常使用,目前常用的解決方法是使用VPN服務(wù)來訪問。第二章開發(fā)工具相關(guān)簡介2.1Android概述 Android一詞本意是指“機(jī)器人”,當(dāng)然現(xiàn)在大家都知道它是Google推出的開源手機(jī)操作系統(tǒng)。Android基于Linux平臺,由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個(gè)為移動終端打造的真正開放和完整的移動軟件。它是一個(gè)由30多家科技公司和手機(jī)公司組成的“開放手機(jī)聯(lián)盟”共同研發(fā)的,這將大大降低新型手機(jī)設(shè)備的研發(fā)成本。完全整合的全移動功能性產(chǎn)品成為“開放手機(jī)聯(lián)盟”的最終目標(biāo)。Android平臺是OpenHandsetAlliance的成果,OpenHandsetAlliance組織由一群共同致力于構(gòu)建更好的移動電話的公司組成。這個(gè)組織由Google領(lǐng)導(dǎo),包括移動運(yùn)營商、手持設(shè)備制造商、零部件制造商、軟件解決方案和平臺提供商以及市場營銷公司。從軟件開發(fā)的觀點(diǎn)看,Android正處在開源領(lǐng)域的中心位置。市場上第一款支持Android的手機(jī)是由HTC制造并由T-Mobile供應(yīng)的G1。這款設(shè)備從設(shè)想到推出花了大約一年的時(shí)間,惟一可用的軟件開發(fā)工具是一些實(shí)行增量改進(jìn)的SDK發(fā)行版。隨著G1發(fā)行日的臨近,Android團(tuán)隊(duì)發(fā)布了SDKV1.0,用于這個(gè)新平臺的應(yīng)用程序也浮出水面。為了鼓勵(lì)創(chuàng)新,Google舉辦了兩屆“AndroidDeveloperChallenges”,為優(yōu)勝的參賽作品提供數(shù)百萬美金的獎勵(lì)。G1問世幾個(gè)月之后,隨后就發(fā)布了AndroidMarket,它使用戶可以瀏覽應(yīng)用程序,并且可以將應(yīng)用程序直接下載到他們的手機(jī)上。經(jīng)過大約18個(gè)月,一個(gè)新的移動平臺進(jìn)入公眾領(lǐng)域。Android操作系統(tǒng)是Google最具殺傷力的武器之一。蘋果以其天才的創(chuàng)新,使得iPhone在全球迅速擁有了數(shù)百萬重視“粉絲”,而Android作為第一個(gè)完整、開放、免費(fèi)的手機(jī)平臺,使開發(fā)者在為其開發(fā)程序時(shí)擁有更大的自由。與WindowsMobile、Symbian等廠商不同的是,Android操作系統(tǒng)免費(fèi)向開發(fā)人員提供,這樣可節(jié)省近三成成本,得到了眾多廠商與開發(fā)者的擁護(hù)。 Android系統(tǒng)具有如下5個(gè)特點(diǎn):開放性。Google與開放手機(jī)聯(lián)盟合作開發(fā)了Android,Google通過與運(yùn)營商、設(shè)備制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望通過建立標(biāo)準(zhǔn)化、開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個(gè)開放式的生態(tài)系統(tǒng)。應(yīng)用程序無極限。Android上的應(yīng)用程序可以通過標(biāo)準(zhǔn)API訪問核心移動設(shè)備功能。通過互聯(lián)網(wǎng),應(yīng)用程序可以聲明它們的功能可供其他應(yīng)用程序使用。應(yīng)用程序是在平等的條件下創(chuàng)建的。移動設(shè)備上的應(yīng)用程序可以被替換或擴(kuò)展,即使是撥號程序或主屏幕這樣的核心組件。應(yīng)用程序可以輕松地嵌入網(wǎng)絡(luò)。應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過WebView顯示網(wǎng)絡(luò)內(nèi)容。應(yīng)用程序可以并行運(yùn)行。Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其中并行運(yùn)行。在后臺運(yùn)行時(shí),應(yīng)用程序可以生成通知以引起注意。隨著Android平臺的擴(kuò)張,引發(fā)了Android人才荒,2010年移動開發(fā)人才需求20萬,未來人才需求缺口將達(dá)百萬。3G人才全球緊缺,實(shí)用人才培養(yǎng)已迫在眉睫。在國內(nèi)三大運(yùn)營商如火如荼的3G營銷戰(zhàn)持續(xù)升溫,再加上3G的推出對整個(gè)行業(yè)的巨大推動作用,無疑將引爆3G手機(jī)開發(fā)工程師這個(gè)黃金職位。但符合條件的Android工程師屈指可數(shù),在未來幾年內(nèi),Android開發(fā)工程師將成為3G行業(yè)炙手可熱的崗位之一。2.2Android開發(fā)技術(shù)簡介Android支持使用Java作為編程語言來開發(fā)應(yīng)用程序,而Android的Java開發(fā)方面從接口到功能,都有層出不窮的變化??紤]到Java虛擬機(jī)的效率和資源占用,Google重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用,因而與J2ME等不同。本設(shè)計(jì)也是使用Java語言設(shè)計(jì)與實(shí)現(xiàn)的。2.2.1Android程序框架介紹本節(jié)將介紹一下開發(fā)Android項(xiàng)目的項(xiàng)目目錄結(jié)構(gòu),如圖2.1所示,這是MIDI音樂播放器的項(xiàng)目目錄結(jié)構(gòu)。與一般的Java項(xiàng)目一樣,src文件夾是項(xiàng)目的所有包及源文件(.java),res文件夾中則包含了項(xiàng)目中所有的資源,比如:程序圖標(biāo)(drawable)、布局文件(layout)、常量(values)等。R.java是在建立項(xiàng)目時(shí)自動生成的,這個(gè)文件是只讀模式,不能更改,R.java是定義該項(xiàng)目所有資源的索引文件。AndroidManifest.xml文件則包含了該項(xiàng)目中所用的Activity、Service等組件,它是一個(gè)功能清單文件。圖2.1MIDI音樂播放器目錄結(jié)構(gòu)2.2.2用戶界面介紹Android平臺提供的控件是非常完美的,控件的使用與網(wǎng)頁的設(shè)計(jì)類似。Android的界面需要寫在“res/layout”下面的布局文件,一般情況下,一個(gè)布局文件對應(yīng)一個(gè)界面。設(shè)計(jì)Android的界面有點(diǎn)像寫HTML代碼,要先給Android定框架,然后再往里面添加控件。Android生成屏幕有三種方式:xml配置生成;通過用戶界面接口生成;直接用代碼生成。在一個(gè)Android應(yīng)用中,用戶界面是由View和ViewGroup對象構(gòu)建的。View和ViewGroup都有很多種類,而它們都是View的子類。開發(fā)者可以對View和ViewGroup進(jìn)行組合,來完成應(yīng)用程序界面設(shè)計(jì)。View任何一個(gè)View對象都繼承android.view.View類。它是一個(gè)存儲屏幕上特定的一個(gè)矩形布局和內(nèi)容屬性的數(shù)據(jù)結(jié)構(gòu)。作為一個(gè)基類,View類為Widget服務(wù),Widget是一組用于繪制交互屏幕元素的完全實(shí)現(xiàn)子類。Widget處理自己的測距和繪圖,所以可以快速地用它們?nèi)?gòu)建UI??捎玫降腤idget包括Text、EditText、Button、RadioButton和Checkbox等。ViewGroupViewGroup是一個(gè)android.view.Viewgroup類的對象。顧名思義,ViewGroup是一個(gè)特殊的View對象,它的功能是裝載和管理一組下層的View和其他Viewroup,ViewGroup可以為UI增加結(jié)構(gòu),并且將復(fù)雜的屏幕元素構(gòu)建成一個(gè)獨(dú)立的實(shí)體。作為一個(gè)基類,ViewGroup為Layout(布局)服務(wù),Layout則是一組提供屏幕界面通用類型的完全實(shí)現(xiàn)子類,一個(gè)Activity界面可以包含多個(gè)ViewGroup和View,,通過這樣的組合可以實(shí)現(xiàn)更復(fù)雜、更完美、更滿足開發(fā)者需要的界面。2.2.3Android四大組件簡介本節(jié)介紹Android非常重要的幾個(gè)組件,Android有四大組件:Activity、Service、BroadcastReceiver、ContentProvider。Activity在Android中使用頻率最高,實(shí)質(zhì)就是一個(gè)可視化界面;一般一個(gè)Android應(yīng)用由多個(gè)Activity組成,多個(gè)Activity組成Activity棧(stack),當(dāng)前活躍的Activity在棧頂Activity上面是一個(gè)Window對象,Window之上通常是一個(gè)布局容器對象(LinearLayout等),在上面是我們所要展示的各個(gè)組件(如按鈕、文本框等)Activity有自己的生命周期,由Android系統(tǒng)來控制新建的Activity要在清單文件AndroidManifest.xml中注冊。ServiceService顧名思義服務(wù),它和事件處理機(jī)制類似,只不過事件處理機(jī)制是程序組件級別的(例如,某個(gè)按鈕的單擊事件),而服務(wù)理機(jī)制是系統(tǒng)級別的,這個(gè)組件是沒有用戶界面的。到目前為止可以使用Intent來啟動一個(gè)程序組件,還可通過使用startService()方法來發(fā)起啟動一個(gè)程序中的服務(wù)。同時(shí)在應(yīng)用程序中實(shí)現(xiàn)Service來監(jiān)聽和響應(yīng)這些服務(wù)的Intent。本應(yīng)用MIDI播放器對歌曲的控制全都做在了Service里,后續(xù)會詳細(xì)說明。BroadcastReceiver指廣播接收器,廣播事件處理機(jī)制是系統(tǒng)級別的系統(tǒng)中定義了很多標(biāo)準(zhǔn)的BroadcastAction來響應(yīng)系統(tǒng)廣播事件,如:ACTION_BOOT_COMPLETED(系統(tǒng)啟動完成后出發(fā)),ACTION_BATTERY_CHANGED(電量低時(shí)出發(fā))也可以自定義BroadcastReceiver接收廣播事件注冊廣播接收器可以使用代碼注冊,也可在清單文件AndroidManifest.xml中注冊。ContentProvider用來保存和檢索數(shù)據(jù)的,并且是應(yīng)用程序之間相互訪問數(shù)據(jù)成為可能,他是跨應(yīng)用程序共享數(shù)據(jù)的唯一方法Android為常用的數(shù)據(jù)類型(如:視頻、音頻、圖片)提供了大量的ContentProvider,它們被放在vider下面,使用時(shí)要注意權(quán)限問題。2.2.4Android數(shù)據(jù)庫SQLite介紹 SQLite第一個(gè)Alpha版本誕生于2000年5月,它是一款輕型數(shù)據(jù)庫,它的設(shè)計(jì)目的是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用,它占用的資源非常少,在嵌入式設(shè)備中,可能只需要幾百KB的內(nèi)存就夠了。也許這正是Android系統(tǒng)要采用SQLite數(shù)據(jù)庫的原因之一。 SQLite數(shù)據(jù)庫是D.RichardHipp用C語言編寫的開源嵌入式數(shù)據(jù)庫,支持的數(shù)據(jù)庫大小是2TB,SQLite是一個(gè)開源的關(guān)系數(shù)據(jù)庫,可以存儲大量數(shù)據(jù),并且可以很容易的進(jìn)行增刪改查。SQLite數(shù)據(jù)庫不像其他的數(shù)據(jù)庫(如Oracle),它沒有服務(wù)器進(jìn)程。所有的內(nèi)容包含在同一個(gè)單個(gè)文件中。該文件是跨平臺的,可以自由復(fù)制。基于其自身的先天優(yōu)勢,SQLite在嵌入式領(lǐng)域得到廣泛應(yīng)用。Android也沒有重復(fù)發(fā)明“輪子”,而是直接是用了SQLite數(shù)據(jù)庫。目前在Android系統(tǒng)中集成的是SQLite3版本,SQLite不支持靜態(tài)數(shù)據(jù)類型,而是使用列關(guān)系。這意味著它的數(shù)據(jù)類型不具有表列屬性,而具有數(shù)據(jù)本身的屬性。當(dāng)某個(gè)值插入數(shù)據(jù)庫時(shí),SQLite將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則SQLite會嘗試將該值轉(zhuǎn)換成列類型。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。SQLite支持NULL、INTEGER、REAL、TEXT和BLOB等數(shù)據(jù)類型。Android提供了創(chuàng)建和使用SQLite數(shù)據(jù)庫的API。SQLiteDatabase代表一個(gè)數(shù)據(jù)庫對象,提供了操作數(shù)據(jù)庫的一些方法,另外還有一個(gè)SQLiteOpenHelper工具類提供了更簡潔的功能。在Android的SDK目錄下有sqlite3工具,我們可以利用它創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表和執(zhí)行一些SQL語句。關(guān)于這個(gè)SQLiteOpenHelper類在后續(xù)章節(jié)中會詳細(xì)講到,它的出現(xiàn)能夠更好地管理和維護(hù)數(shù)據(jù)庫。2.3Java語言介紹 Java是一種簡單的、跨平臺的、面向?qū)ο蟮?、分布式的、結(jié)實(shí)的、健壯的、安全的、結(jié)構(gòu)的、中立的、可移植的、性能很優(yōu)異的多線程的、動態(tài)的語言。當(dāng)1995年SUN推出Java語言之后,全世界的目光都被這個(gè)神奇的語言所吸引。 它最初被命名為Oak,目標(biāo)設(shè)定在家用電器等小型系統(tǒng)的編程語言,來解決諸如電視機(jī)、電話、鬧鐘、烤面包機(jī)等家用電器的控制和通訊問題。由于這些智能化家電的市場需求沒有預(yù)期的高,Sun放棄了該項(xiàng)計(jì)劃。就在Oak幾近失敗之時(shí),隨著互聯(lián)網(wǎng)的發(fā)展,Sun看到了Oak在計(jì)算機(jī)網(wǎng)絡(luò)上的廣闊應(yīng)用前景,于是改造了Oak,以“Java”的名稱正式發(fā)布。Java編程語言的風(fēng)格十分接近C、C++語言。Java是一個(gè)純的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它繼承了C++語言面向?qū)ο蠹夹g(shù)的核心,Java舍棄了C++語言中容易引起錯(cuò)誤的指針(以引用取代)、運(yùn)算符重載(operatoroverloading)、多重繼承(以接口取代)等特性,增加了垃圾回收功能用于回收不再被引用的對象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。在JavaSE1.5版本中,Java又引入了泛型編程(GenericProgramming)、類型安全的枚舉、不定長度參數(shù)和自動裝/拆箱等語言特性。Java不同于一般的編譯執(zhí)行計(jì)算機(jī)語言和解釋執(zhí)行計(jì)算機(jī)語言。它首先將源代碼編譯成二進(jìn)制字節(jié)碼(bytecode),然后依賴各種不同平臺上的虛擬機(jī)來解釋執(zhí)行字節(jié)碼,從而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺特性。不過,每次的編譯執(zhí)行需要消耗一定的時(shí)間,這同時(shí)也在一定程度上降低了Java程序的運(yùn)行效率。但在J2SE1.4.2發(fā)布后,Java的執(zhí)行速度有了大幅提升。與傳統(tǒng)程序不同,Sun公司在推出Java之際就將其作為一種開放的技術(shù)。全球數(shù)以萬計(jì)的Java開發(fā)公司被要求所設(shè)計(jì)的Java軟件必須相互兼容。“Java語言靠群體的力量而非公司的力量”是Sun公司的口號之一,并獲得了廣大軟件開發(fā)商的認(rèn)同。這與微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同。Sun公司對Java編程語言的解釋是:Java編程語言是個(gè)簡單、面向?qū)ο?、分布式、解釋性、健壯、安全與系統(tǒng)無關(guān)、可移植、高性能、多線程和動態(tài)的語言。Java平臺是基于Java語言的平臺。這樣的平臺目前非常流行,因此微軟公司推出了與之競爭的.NET平臺以及模仿Java的C#AndroidGoogle選擇用Java語言作為它十分流行的Android移動操作系統(tǒng)的編程語言。這個(gè)選擇在整個(gè)件研發(fā)人員的社區(qū)中引起了新的關(guān)注。Android程序編譯過程比普通Java程序要多經(jīng)過一個(gè)步驟,將JVM二進(jìn)制碼轉(zhuǎn)換成Dalvik二進(jìn)制碼。Google已經(jīng)可以利用Eclipse為軟件研發(fā)人員提供一個(gè)成熟的編寫Android應(yīng)用的開發(fā)環(huán)境。Android支持使用Java作為編程語言來開發(fā)應(yīng)用程序,而Android的Java開發(fā)方面從接口到功能,都有層出不窮的變化??紤]到Java虛擬機(jī)的效率和資源占用,Google重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用。第三章系統(tǒng)分析3.1可行性分析3.1.1隨著時(shí)代的發(fā)展,3G時(shí)代已經(jīng)來臨,人們對于手機(jī)的操作已經(jīng)很熟練了,而對于Android手機(jī),更是由于簡單的操作,行云流水的觸摸感覺,已經(jīng)贏得了世人的青睞。對于本應(yīng)用而言,操作方面不對存在障礙,簡潔大方的用戶界面設(shè)計(jì),只需用戶輕輕點(diǎn)擊,即可完成所有的對音樂播放的控制等操作。3.1.本系統(tǒng)開發(fā)經(jīng)費(fèi)在經(jīng)濟(jì)上是可以接受的,現(xiàn)在電腦和手機(jī)已經(jīng)普及,而手機(jī)更是人人都擁有,而Android手機(jī)更是主流手機(jī),在市面上一般的Android系統(tǒng)手機(jī)的價(jià)錢都在千元左右,所示說價(jià)錢并不是很昂貴。其開發(fā)軟件在目前來說全部都是免費(fèi)的。所以本應(yīng)用在經(jīng)濟(jì)上是可行的。3.1. Android作為第一個(gè)完整、開放、免費(fèi)的手機(jī)平臺,Android也為開發(fā)者提供了完整的API,使開發(fā)者在為其開發(fā)程序時(shí)擁有更大的自由。 只要開發(fā)者有一個(gè)比較全面的Java基礎(chǔ),以及一些簡單的XML技術(shù),對軟件的開發(fā)流程有一定的了解,在開發(fā)Android程序的時(shí)候一般是不會有太大的問題的。只需搭建Android開發(fā)必要的開發(fā)環(huán)境就可以了,本應(yīng)用選擇的開發(fā)工具Eclispe+JDK+Android插件ADT。所以開發(fā)者想進(jìn)行Android開發(fā),準(zhǔn)備工作其實(shí)是很簡單的。 本應(yīng)用選擇Eclipse,配合Android開發(fā)插件ADT,只需運(yùn)行一個(gè)AndroidVirtualDevice(AVD),就可以進(jìn)行開發(fā)和調(diào)試的工作,如圖3.1所示,這是一個(gè)AndroidVirtualDevice(AVD)。綜上所述,本應(yīng)用在技術(shù)上是可行的。圖3.1Andoid模擬器(AVD)3.2設(shè)計(jì)目標(biāo)現(xiàn)今社會生活緊張,而欣賞音樂是其中最好的舒緩壓力的方式之一,本項(xiàng)目的目的是開發(fā)一個(gè)可以播放主流音樂文件格式的播放器,MIDI音樂播放器的實(shí)現(xiàn)的這主要功能是播放主流格式的音樂文件,并且能夠控制播放、暫停、上一曲、下一曲、進(jìn)度條控制,視覺外觀,播放列表和歌曲列表的操作等多種播放控制功能,界面簡明,操作簡單。本項(xiàng)目是一款基于Android手機(jī)平臺的音樂播放器,使Android手機(jī)擁有個(gè)性的多媒體播放器,使手機(jī)顯得更生動靈活化,與人們更為接近,讓手機(jī)主人隨時(shí)隨地處于音樂視頻的旋律之中,使人們的生活更加多樣化。在國內(nèi)三大運(yùn)營商如火如荼的3G營銷戰(zhàn)持續(xù)升溫,再加上3G的推出對整個(gè)行業(yè)的巨大推動作用,無疑將引爆3G手機(jī)開發(fā)工程師這個(gè)黃金職位。但符合條件的Android工程師屈指可數(shù),在未來幾年內(nèi),Android開發(fā)工程師將成為3G行業(yè)炙手可熱的崗位之一。MIDI音樂播放器的另外一個(gè)設(shè)計(jì)目標(biāo)就是讓自己更加系統(tǒng)的去熟悉和學(xué)習(xí)Android開發(fā)技術(shù)的相關(guān)知識,為以后開發(fā)Android程序打下良好的基礎(chǔ)。3.3功能需求分析根據(jù)播放器的實(shí)現(xiàn)目標(biāo),可獲得播放器的基本需求,以下從不同角度來描述系統(tǒng)的需求,系統(tǒng)的功能需求,分成三部分來概括,即播放器的基本控制需求,播放列表管理需求和播放器友好性需求,如圖3.2所示為應(yīng)用功能需求結(jié)構(gòu)圖分析。圖3.2MIDI播放器功能結(jié)構(gòu)圖3.3.1播放音樂播放器對于大家來說可以說是不陌生了,對于播放器的控制要求大家也是更加熟悉了。本應(yīng)用對播放器的基本控制也全部得到了實(shí)現(xiàn),例如:暫停、上一首、下一首和播放時(shí)間的同步顯示等,如圖3.3所示播放器的基本控制功能用例圖分析。圖3.3播放器的基本控制功能用例圖3.3.2 MIDI音樂播放器設(shè)計(jì)兩個(gè)歌曲列表,一個(gè)列表顯示所有音樂,另外一個(gè)列表顯示用戶自己喜歡并且自己添加的音樂,如圖3.4所示,應(yīng)有的需求有:添加音樂功能:用戶可以添加自己喜歡的音樂于另外一個(gè)列表。刪除音樂功能:用戶可以刪除自己添加的歌曲。搜索音樂功能:用戶對兩個(gè)列表中的歌曲進(jìn)行搜索操作。播放列表中的歌曲:用戶瀏覽列表,并且可以播放選中的歌曲。圖3.4歌曲列表模塊用例圖3.3.MIDI音樂播放器播放模式模塊應(yīng)有的需求:循環(huán)播放、隨機(jī)播放、順序播放和單曲循環(huán)的開啟與關(guān)閉,如圖3.5所示。圖3.5播放模式模塊用例圖3.4性能需求分析根據(jù)Android手機(jī)系統(tǒng)要求無響應(yīng)時(shí)間為5秒,所以就有如下性能要求:當(dāng)要求歌曲播放時(shí),程序響應(yīng)時(shí)間最長不能超過5秒。當(dāng)要求歌曲暫停時(shí),程序響應(yīng)時(shí)間最長不能超過5秒。當(dāng)要求添加或刪除歌曲時(shí),程序響應(yīng)時(shí)間最長不能超過5秒。當(dāng)要求歌曲上/下一首時(shí),程序響應(yīng)時(shí)間最長不能超過5秒。當(dāng)要求進(jìn)行列表切換時(shí),程序響應(yīng)時(shí)間最長不能超過5秒。第四章總體設(shè)計(jì)4.1數(shù)據(jù)庫設(shè)計(jì) MIDI音樂播放器使用的是Android系統(tǒng)內(nèi)置的SQLite數(shù)據(jù)庫,對于SQLite數(shù)據(jù)庫的介紹詳見2.2.4節(jié)。 Android系統(tǒng)為開發(fā)者提供了一個(gè)MediaStore這個(gè)類,它是一個(gè)多媒體數(shù)據(jù)庫,Android中多媒體信息都可以從這里提取。這個(gè)MediaStore包括了多媒體數(shù)據(jù)庫的所有信息,包括音頻,視頻和圖像等。存放媒體信息如TITLE(標(biāo)題)、ARTIST(藝術(shù)家)、ALBUM(專輯封面)、SIZE(大小)和DATA(路徑)等字段。 MIDI音樂播放器數(shù)據(jù)庫設(shè)計(jì)階段,只需要兩張表,第一張表存放所有的歌曲信息(即MediaStore類,只需通過Uri:EXTERNAL_CONTENT_URI來訪問,就可以得到想要的歌曲信息字段,MIDI音樂播放器用到的字段有:_ID(歌曲ID)、TITLE(標(biāo)題)、ARTIST(藝術(shù)家)、DATA(路徑)、ALBUM(專輯封面)、DURATION(歌曲時(shí)間)和ALBUM_ID(專輯封面ID)。第二張表favourite存放于自己創(chuàng)建的MyMusic.db數(shù)據(jù)庫中,用于存放用戶自己添加歌曲的信息,如表4.1所示。表4.1我的音樂表(favourite)字段名稱數(shù)據(jù)類型允許空說明_IdINTEGERNotnull主鍵Music_idINTEGERNotnull歌曲IDMusic_nameTEXTNotnull歌曲名字Music_aristTEXT演唱者M(jìn)usic_pathTEXTNotnull路徑Music_ablumINTEGER專輯封面IDMusic_timeINTEGERNotnull歌曲長度4.2基本流程設(shè)計(jì)4.2.1整體流程 MIDI音樂播放器整體流程,如圖4.2所示。圖4.2MIDI音樂播放器系統(tǒng)流程圖4.2.2播放控制模塊是整個(gè)設(shè)計(jì)控制的核心部分,用戶只需通過簡單的觸摸操作就可以實(shí)現(xiàn)對歌曲播放的控制,如圖4.3所示。圖4.3播放控制模塊流程圖4.2.3MIDI音樂播放器在初始化界面時(shí),從系統(tǒng)數(shù)據(jù)庫獲得SD內(nèi)所有音樂信息;從數(shù)據(jù)庫Mymusic.db數(shù)據(jù)庫獲取用戶添加的音樂的信息,將這些得到的信息構(gòu)建到列表呈現(xiàn)給用戶,如果這是用戶第一次運(yùn)行MIDI音樂播放器,程序?qū)⑿陆∕ymusic.db數(shù)據(jù)庫。掃描完歌曲文件后,掃描/SDCard/目錄下的所有以.lrc為后綴的歌詞文件并且存儲文件名和文件的絕對路徑。如果Mymusic.db數(shù)據(jù)庫中有數(shù)據(jù),就可以對Mymusic.db數(shù)據(jù)庫進(jìn)行查詢、添加和刪除操作,然后刷新列表信息,這一模塊的流程如圖4.4所示。圖4.4歌曲列表操作流程圖4.2.4播放模式控制即循環(huán)播放、隨機(jī)播放、順序播放和單曲循環(huán),其中前三種播放模式采用循環(huán)切換的模式進(jìn)行選擇,單曲循環(huán)獨(dú)立開來,進(jìn)行開啟或者關(guān)閉,如圖4.5所示。圖4.5播放模式流程圖第五章詳細(xì)設(shè)計(jì)5.1MIDI播放器UI設(shè)計(jì) 對于Android來說,一個(gè)好的應(yīng)用界面的必備條件是:內(nèi)容清晰、指示明白、屏幕美觀和有親切感。UI通常包含圖形和文字,應(yīng)用界面的設(shè)計(jì)是對控件進(jìn)行適當(dāng)?shù)娜∩峒肮δ艿倪x擇和處理的過程(對控件進(jìn)行事件監(jiān)聽)。在MIDI播放器的設(shè)計(jì)過程中,也是對設(shè)計(jì)的方法進(jìn)行反復(fù)的推敲、琢磨,才能使其達(dá)到完美的境界,MIDI播放器界面的整體風(fēng)格為經(jīng)典的黑白色調(diào),界面設(shè)計(jì)更簡潔,更大方。 Android的界面寫在“res/layout”下面的布局文件中,一般情況下,一個(gè)布局文件對應(yīng)一個(gè)界面,如圖5.1所示,這是MIDI播放器所有的布局文件。雖然Android生成屏幕的方有三種(第二章已介紹),但是一般使用xml文件配置生成,這里有必要說一下,其實(shí)Android界面的代碼編寫有點(diǎn)像HTML,添加框架,編寫代碼,生成控件。MIDI音樂播放器的每一個(gè)可視化界面,都有其的唯一的布局配置文件,該文件里面有各種布局方式:線性布局(LinearLayout)和相對布局(RelativeLayout)等,通過各種資源文件如圖像,文字,顏色的引用,和這幾種布局的完美組合,這樣就形成了MIDI播放器不同的可視化界面和絢爛的效果。下面我詳細(xì)介紹播放器中的幾個(gè)重要布局配置文件的設(shè)計(jì)和實(shí)現(xiàn)。圖5.1MIDI播放器布局文件5.1.1歌曲列表界面設(shè)計(jì) 在程序初始化后,呈現(xiàn)給用戶的界面就是歌曲列表界面,如圖5.2所示。圖5.2歌曲列表界面歌曲列表界面實(shí)現(xiàn)了線性布局(LinearLayout)和相對布局(RelativeLayout)的相互嵌套,歌曲信息通過ListView控件顯示,它以列表的形式展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適應(yīng)顯示,實(shí)現(xiàn)代碼如下所示。<ListViewandroid:id="@+id/musiclist"android:layout_height="fill_parent" android:layout_width="fill_parent"android:layout_marginLeft="6dp" android:layout_marginRight="6dp"android:cacheColorHint="#00000000" android:divider="@color/divider_color"android:dividerHeight="1dp" android:listSelector="@drawable/selector_list_item" android:layout_below="@+id/relativeLayout1"></ListView>在歌曲播放列表使用了SlidingDrawer(滑動式抽屜)這個(gè)控件,SlidingDrawer隱藏屏外的內(nèi)容,并允許用戶通過handle以顯示隱藏內(nèi)容,將播放控制界面放在了這個(gè)隱藏內(nèi)容中,它可以垂直或水平滑動,布局代碼實(shí)現(xiàn)如下所示。<lxd.midi.Widget.MySlidingDrawer android:id="@+id/slidingDrawer"android:layout_width="fill_parent" android:layout_height="fill_parent"android:handle="@+id/handle" android:content="@+id/content"android:topOffset="10dp"> <includelayout="@layout/sliderdrawer_handle_layout"></include> <includelayout="@layout/sliderdrawer_content_layout"></include> </lxd.midi.Widget.MySlidingDrawer>有時(shí)Android自帶的SlidingDrawer控件不能滿足開發(fā)者的需求,重寫SlidingDrawer這個(gè)控件,將會為整個(gè)系統(tǒng)的界面布局增色不少,重寫實(shí)現(xiàn)代碼如下所示。/**獲取控件的屏幕區(qū)域*/publicRectgetRectOnScreen(Viewview){Rectrect=newRect();int[]location=newint[2];Viewparent=view;if(view.getParent()instanceofView){parent=(View)view.getParent();}parent.getLocationOnScreen(location);view.getHitRect(rect);rect.offset(location[0],location[1]);returnrect;}publicbooleanonInterceptTouchEvent(MotionEventevent){ //觸摸位置轉(zhuǎn)換為屏幕坐標(biāo)int[]location=newint[2];intx=(int)event.getX();inty=(int)event.getY();this.getLocationOnScreen(location);x+=location[0];y+=location[1];if(mTouchableIds!=null){for(intid:mTouchableIds){Viewview=findViewById(id);if(view.isShown()){ Rectrect=getRectOnScreen(view); if(rect.contains(x,y)){if(event.getAction()==MotionEvent.ACTION_DOWN){if(mTouchViewClickListener!=null){ mTouchViewClickListener.onViewClick(view);}}returntrue;}}}}//抽屜行為控件if(event.getAction()==MotionEvent.ACTION_DOWN&&mHandleId!=0){Viewview=findViewById(mHandleId);Rectrect=getRectOnScreen(view);if(rect.contains(x,y)){//點(diǎn)擊抽屜控件時(shí)交由系統(tǒng)處理{returnsuper.onInterceptTouchEvent(event);}}else{returnfalse;}}returnsuper.onInterceptTouchEvent(event);}@OverridepublicbooleanonTouchEvent(MotionEventevent){returnsuper.onTouchEvent(event);}}5.1.2播放控制界面設(shè)計(jì)在MIDI音樂播放器界面設(shè)計(jì)中,將播放控制界面放在了SlidingDrawer這個(gè)控件的隱藏內(nèi)容中,只需點(diǎn)擊歌曲列表界面的下方的按鈕,播放控制界面會從屏幕下方滑出也可以拖動,也可以在此隱藏,如圖5.3所示。圖5.3播放控制界面 播放控制界面中的重點(diǎn)布局就是自定義的SeekBar(拖動條)這個(gè)控件的實(shí)現(xiàn),如圖5.3所示,實(shí)現(xiàn)的方法就是修改android:progressDrawable和android:thumb這兩個(gè)屬性,這兩個(gè)屬性自己編寫,配置在seekbar_style.xml和seekbar_thumb.xml這兩個(gè)文件中,實(shí)現(xiàn)代碼如下所示。<SeekBarandroid:id="@+id/seekBar"android:layout_width="fill_parent" android:layout_height="wrap_content"android:layout_toRightOf="@id/CurTime" android:layout_toLeftOf="@id/TotalTime"android:paddingLeft="5dp" android:paddingRight="5dp"android:max="100" android:progressDrawable="@drawable/seekbar_style"android:thumb="@drawable/seekbar_thumb" android:background="@drawable/progress_buffering"> </SeekBar>seekbar_style.xml:<?xmlversion="1.0"encoding="utf-8"?><layer-listxmlns:android="/apk/res/android"><itemandroid:id="@android:id/secondaryProgress"><clipandroid:drawable="@drawable/progress_buffering"/><itemandroid:id="@android:id/progress"><clipandroid:drawable="@drawable/progress_playing"/></layer-list>seekbar_thumb.xml:<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="/apk/res/android"><itemandroid:state_pressed="true"android:drawable="@drawable/thumb_f"/><itemandroid:drawable="@drawable/thumb_normal"/></selector>5.2播放器初始化實(shí)現(xiàn) MIDI音樂播放器運(yùn)行之后,需要一個(gè)初始化的過程,這個(gè)過程實(shí)際就是對SD卡中所有音樂一個(gè)掃描的過程,即獲取所有音樂的相關(guān)信息,如歌曲的名字和演唱者等。初始化過程中,獲取音樂的操作做在了一個(gè)線程Thread內(nèi),后臺進(jìn)行查詢數(shù)據(jù)庫操作,線程實(shí)現(xiàn)代碼如下所示。 privateArrayList<MusicData>setMusicDatas(){ //TODOAuto-generatedmethodstub Cursorcursor=contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, musicdata, null,null,null); if(cursor!=null){ cursor.moveToFirst(); intmusicID=cursor.getColumnIndex(MediaStore.Audio.Media._ID); intmusicTitle=cursor.getColumnIndex(MediaStore.Audio.Media.TITLE); intmusicTime=cursor.getColumnIndex(MediaStore.Audio.Media.DURATION); intmusicArtist=cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); intmusicPath=cursor.getColumnIndex(MediaStore.Audio.Media.DATA); intmusicALBUM_ID=cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); intmusicCount=cursor.getCount(); musicDatasList=newArrayList<MusicData>(); for(inti=0;i<musicCount;i++){ musicData=newMusicData(); musicData.setMusic_ID(cursor.getInt(musicID)); musicData.setMusic_Name(cursor.getString(musicTitle)); musicData.setMusic_Time(cursor.getInt(musicTime)); musicData.setMusic_Arist(cursor.getString(musicArtist)); musicData.setMusic_Path(cursor.getString(musicPath)); musicData.setmusic_Album_ID(cursor.getInt(musicALBUM_ID)); System.out.println(musicData.getMusic_Path()); musicDatasList.add(musicData); cursor.moveToNext(); } cursor.close(); returnmusicDatasList; } returnmusicDatasList; } privateHandlermHandler=newHandler(){ publicvoidhandleMessage(Messagemessage){ Intentintent=newIntent(); intent.setClass(context,MusicListActivity.class); bundle=newBundle(); bundle.putSerializable("musicList",musicList); intent.putExtras(bundle); ((MiDiMusicActivity)context).startActivity(intent); ((MiDiMusicActivity)context).overridePendingTransition(R.anim.zoom_out,R.anim.zoom_in);//實(shí)現(xiàn)初始化界面淡出效果 ((MiDiMusicActivity)context).finish(); System.out.println("musiclisthavaloaded!!"); } };}5.3歌曲列表模塊實(shí)現(xiàn)5.3.1本節(jié)介紹MIDI播放器如何進(jìn)行Android數(shù)據(jù)庫連接,Android中自帶SQLite數(shù)據(jù)庫,這是一個(gè)十分小型的數(shù)據(jù)庫,第二章已經(jīng)做過介紹。Android數(shù)據(jù)庫存儲的位置在data/data/<項(xiàng)目文件夾>/databases/目錄下。Android是利用ContentProvider作為內(nèi)容提供商,SQLiteOpenHelper數(shù)據(jù)庫幫助類來進(jìn)行對數(shù)據(jù)庫的創(chuàng)建和操作。通過Context.getContentResolver()方法直接對數(shù)據(jù)庫進(jìn)行操作。程序中數(shù)據(jù)庫類為DatabaseHelperextendsSQLiteOpenHelper(繼承關(guān)系)。數(shù)據(jù)庫操作類為DBAdapter,在這類中實(shí)現(xiàn)了對數(shù)據(jù)庫的添加、刪除和查詢操作。數(shù)據(jù)庫創(chuàng)建Android提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫創(chuàng)建方式。繼承SQLiteOpenHelper,實(shí)現(xiàn)onCreate和onUpgrade兩個(gè)方法,有個(gè)好處就是便于數(shù)據(jù)庫版本的升級,代碼實(shí)現(xiàn)如下所示。privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{ //當(dāng)調(diào)用getWritableDatabase() //或getReadableDatabase()方法時(shí) //則創(chuàng)建一個(gè)數(shù)據(jù)庫 publicDatabaseHelper(Contextcontext){ super(context,DB_NAME,null,DB_VERSION); //TODOAuto-generatedconstructorstub } /*創(chuàng)建一個(gè)表*/ @Override publicvoidonCreate(SQLiteDatabasedb){ //TODOAuto-generatedmethodstub //數(shù)據(jù)庫沒有表時(shí)創(chuàng)建一個(gè) db.execSQL(DB_CREATE); System.out.println(TAG+"havacreat"); }//數(shù)據(jù)庫升級時(shí)執(zhí)行此方法 @Override publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ //TODOAuto-generatedmethodstub db.execSQL("DROPTABLEIFEXISTSfavourite"); onCreate(db); } }數(shù)據(jù)庫操作MIDI音樂播放器主要實(shí)現(xiàn)了對數(shù)據(jù)庫的查詢、插入和刪除操作,其實(shí)操作很簡單,代碼實(shí)現(xiàn)如下所示。 /*插入一條數(shù)據(jù)*/ publiclonginsertData(intmusic_id,Stringmusic_name,Stringmusic_path, Stringmusic_arist,intmusic_time,intmusic_ablum){ ContentValuesinitialValues=newContentValues(); initialValues.put(MUSIC_ID,music_id); initialValues.put(MUSIC_NAME,music_name); initialValues.put(MUSIC_PATH,music_path); initialValues.put(MUSIC_ARIST,music_arist); initialValues.put(MUSIC_TIME,music_time); initialValues.put(MUSIC_ABLUM,music_ablum); returnmSQLiteDatabase.insert(DB_TABLE,KEY_ID,initialValues); } /*通過Cursor查詢所有數(shù)據(jù)*/ publicCursorfetchAllData(){ returnmSQLiteDatabase.query(DB_TABLE,newString[]{MUSIC_ID, MUSIC_NAME,MUSIC_PATH,MUSIC_ARIST,MUSIC_TIME,MUSIC_ABLUM}, null,null,null,null,null); } //條件查詢 publicCursorselectData(intmusic_id)throwsSQLException{ returnmSQLiteDatabase.query(DB_TABLE,newString[]{MUSIC_ID, MUSIC_NAME,MUSIC_PATH,MUSIC_ARIST,MUSIC_TIME,MUSIC_ABLUM},"music_ID="+music_id+"",null,null,null,null); } //刪除數(shù)據(jù) publicbooleandeleteData(intmusic_id){ returnmSQLiteDatabase.delete(DB_TABLE,MUSIC_ID+"="+music_id,null)>0; }5.3.2歌曲列表搜索、添加和刪除 MIDI音樂播放器通過彈出自定義Dialog對話框,實(shí)現(xiàn)了對歌曲的搜索、添加和刪除的功能。通過用戶輸入的內(nèi)容進(jìn)行判斷,進(jìn)而對數(shù)據(jù)庫進(jìn)行操作,動態(tài)的刷新我的音樂歌曲列表,將結(jié)果反饋給用戶,下面進(jìn)行分別描述。刪除功能實(shí)現(xiàn)監(jiān)聽刪除按鈕,當(dāng)有按下事件放生時(shí),監(jiān)聽代碼:deleteButton.setOnClickListener(newMusicListOnClickListener(this,musicDatasList,myFavouriteList,musicListView,Adapter))。其實(shí)Android系統(tǒng)為開發(fā)者和用戶提供了四種比較常用的對話框:警告對話框、進(jìn)度對話框、日期選擇對話框和時(shí)間選擇對話框,不過選擇系統(tǒng)的對話框,它的樣式一般滿足不了開發(fā)者的要求,需要開發(fā)者自定義對話框,就是繼承Dialog這個(gè)類,MIDI播放器也自定義了自己的對話框,代碼如下所示:DeleteDialogdialog=newDeleteDialog(context,R.style.MyDialog);dialog.showDialog();刪除功能的實(shí)現(xiàn),只需對對話框中刪除按鈕進(jìn)行事件監(jiān)聽,獲得編輯框中的內(nèi)容,調(diào)用DBAdapter這個(gè)類中的刪除函數(shù)deleteData(intmusic_id),用戶輸入列表中歌曲對應(yīng)的ID,就可以實(shí)現(xiàn)刪除了,之后關(guān)閉對話框,刷新列表就可以了,核心代碼如下所示:intmusic_id=UIManager.getMyFavouriteList().get(id-1).getMusic_ID();dbAdapter.open();System.out.println(dbAdapter.deleteData(music_id));//刪除數(shù)據(jù)庫指定music_id記錄dbAdapter.close();dialog.cancel();//關(guān)閉dialogmyFavouriteList=setMyvouriteDatas(
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度煤炭運(yùn)輸與環(huán)保達(dá)標(biāo)改造合同4篇
- 二零二五年度倉庫租賃保證金退還協(xié)議3篇
- 2025年度茶葉品牌授權(quán)與推廣合作協(xié)議4篇
- 2025年度現(xiàn)代農(nóng)業(yè)場經(jīng)營承包投資合同4篇
- 二零二五年螺旋鋼管維修保養(yǎng)服務(wù)合同4篇
- 2025年度無人機(jī)航拍與數(shù)據(jù)處理合同4篇
- 二零二五年度生態(tài)環(huán)境工程監(jiān)理工程師補(bǔ)考協(xié)議3篇
- 個(gè)人二零二四年度居間服務(wù)合同3篇
- 足球視頻制作課程設(shè)計(jì)
- 二零二五年度講師行業(yè)研討會組織與贊助合同3篇
- 運(yùn)輸供應(yīng)商年度評價(jià)表
- 機(jī)械點(diǎn)檢員職業(yè)技能知識考試題庫與答案(900題)
- 成熙高級英語聽力腳本
- 北京語言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 肺癌的診治指南課件
- 人教版七年級下冊數(shù)學(xué)全冊完整版課件
- 商場裝修改造施工組織設(shè)計(jì)
- (中職)Dreamweaver-CC網(wǎng)頁設(shè)計(jì)與制作(3版)電子課件(完整版)
- 統(tǒng)編版一年級語文上冊 第5單元教材解讀 PPT
- 加減乘除混合運(yùn)算600題直接打印
- ASCO7000系列GROUP5控制盤使用手冊
評論
0/150
提交評論