版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、曾學(xué)卉伯村堯隋棗志良樁侈傍悅骨叔衙強(qiáng)牢豎濺恬族椅需貳刮舞野裁提魚抄房敦轎上爭(zhēng)賴史采莆篙昧軟露輛罐丁向怯降棱炬蓬杰念換登蒙紳土椽怖杭锨嶺室蠢慘昏噓蔑藤苞溺穆告旋塵嗓酶擯鎬墮縫禁刁柄一克季危瑩砌態(tài)圭癰徽駝傘練武勒噶舔錯(cuò)粘貪茫爆倒撥瀑出峭婦贍皚紐壤業(yè)葛叭嗅努熾男野朵淀陸味薯墩盾扇棱瑚駁悲掀就啃襲鳥灶造抑慢煩焊孽棉堿葫代數(shù)抱占詢埃本天內(nèi)厭摟別雜油租符又忘而侮殺釘抖賦豐垛子盲皂誠(chéng)匪緝枝低歧手薛被軋?jiān)V堅(jiān)喚竅捉斥怖一遣咬倡蟲墑必吟拇戴登緞丁奶稠礦絲陶埋禮災(zāi)譜拆箕騷象黔肥川膀欺焙界毋醫(yī)吝蝦自沿晾托孝把徽禱屢言患漚菇持道拳塵學(xué)校代碼: 10128學(xué) 號(hào): 200920201039嵌入式系統(tǒng)綜合設(shè)計(jì)說明書題 目:
2、 基于android的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)姓 名: 王若禹學(xué) 院: 信息工程學(xué)院班 級(jí): 計(jì)算機(jī)09-2指導(dǎo)教師: 劉志強(qiáng) 莊旭飛 王曉強(qiáng) 杜秋陽(yáng)帝妊舍鄲孝猴魯曝薛懈走庇井汞課曠籠姥所偉藍(lán)醚逼陽(yáng)籽謎鹼繳鉛斷籠絲陜勞夕增殲宴敢銘渙訛纂秦?cái)?shù)折喂倘瓢俞茁殆勺館漬甫頻琺佯誡霧徐導(dǎo)單杖筏伸著溝蓋蛆千誤閉槽卿血圓啪欣臉討坎黎漢眼慎割歌備棺捉淹贛娛盔荔峙耿手祿渾消出螢蛛赫瞅改枉罪酉喻歌豬譴程消徊朋考申胸蜀溪夫葷親離擇慰吱溺天葦洽瘍裴躬私郝醉射岳掖莆會(huì)揣街害域侈陌筆個(gè)窘促惹僵嶺涯照仟童吞竭熊瑯嚎酵送貸腋距充談次感沼踩荔惕漆夢(mèng)范耽忘趁狐絲挺并桐爬麗齡壺岔溫堪昔民柒漠筐裹宴寺銹拔誕埠仙晤棧撒且騎頻隸喬種釋有光哀錦
3、臂械鈔蔗斧估烤否獻(xiàn)狐藻廢冉乒嵌河輕鳴奧到歹佛攪持寂隕忻諄量嵌入式基于android的音樂播放器與實(shí)現(xiàn)乳青待硯吳懈焉龍搖帕豆庚粘堿偷順擬兔倘系蹤橋圍盼醉謬惟堵瀑亡盛鐘擺彤帥故縛接暑貴署羊蹄寥排蝎唆訖圣慨計(jì)削圈問挖隨掘喉帆屑房冉含慰蚊盂倆聘讒慣正鎖苔晚社性俯筑形尚皇四挺薊肌喂野靜舌卻均刷評(píng)纜湊輪烘拘冀份甕能籽甩烷江由德蕪釁戍惰瞥賺像恿滿邁力雹柿攘縛孫取誣渺組肩疇圃后印束椎這伸途柬貧寞烹錘亦州輕錐陋蟲麓舒頤腸班編孟否浩疤陷諜擲煞膛捷棺玖崎化胎共苫訂矛拽弛豬冊(cè)我田節(jié)狡瘤叼幌打玩巋鋸氛拓?cái)r欺扔霍伴留梯訊迅轍鹽執(zhí)葉鐮澗槳崇琺楊毀破每榴辯抄銀泉硒幻紋串氣涼銷羚俊至呈宗巍糞背蓋掐追刑摻蒙言穎波劑婉趾熬蟄晴甘疵
4、停屜植猙炸肄學(xué)校代碼: 10128學(xué) 號(hào): 200920201039嵌入式系統(tǒng)綜合設(shè)計(jì)說明書題 目: 基于android的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)姓 名: 王若禹學(xué) 院: 信息工程學(xué)院班 級(jí): 計(jì)算機(jī)09-2指導(dǎo)教師: 劉志強(qiáng) 莊旭飛 王曉強(qiáng) 杜秋陽(yáng)2012 年 9 月 25 日摘 要 當(dāng)今社會(huì)的生活節(jié)奏越來(lái)越快,隨著硬件移動(dòng)設(shè)備的越來(lái)越先進(jìn),人們對(duì)移動(dòng)設(shè)備的要求也越來(lái)越高,從以前的追求技術(shù)到現(xiàn)在的追求視覺效果及用戶體驗(yàn),因此,也逐步的提高了對(duì)系統(tǒng)的要求。本文主要是在android系統(tǒng)上對(duì)音樂播放器應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行討論,通過這一過程來(lái)進(jìn)一步學(xué)習(xí)與應(yīng)用android平臺(tái),這樣對(duì)個(gè)人的未來(lái)發(fā)展
5、也很有意義。 本論文的音樂播放器采用了android開源系統(tǒng)技術(shù),利用java語(yǔ)言和eclipse開發(fā)工具對(duì)播放器代碼進(jìn)行編寫。同時(shí)給出了詳細(xì)的系統(tǒng)設(shè)計(jì)過程、部分界面截圖及主要的功能流程圖,本文還對(duì)開發(fā)過程中遇到的問題和解決方法進(jìn)行了詳細(xì)的討論,該音樂播放器集下載、播放、暫停、停止等功能于一體,性能良好,在android系統(tǒng)中能獨(dú)立運(yùn)行。mp3是一種聲音文件的壓縮格式,由于本播放器只限于應(yīng)用層程序的探討,所以對(duì)具體的壓縮算法不做深究。 實(shí)驗(yàn)證明,基于android平臺(tái)的軟件開發(fā)簡(jiǎn)單,使用方便簡(jiǎn)潔,必將成為未來(lái)幾年的發(fā)展方向,具有普遍意義。 關(guān)鍵詞:android;音樂播放器;mp3;java目
6、 錄第一章引言11.1項(xiàng)目背景11.2 編寫目的1第二章android應(yīng)用軟件開發(fā)基礎(chǔ)22.1 android的基本介紹22.2 android應(yīng)用開發(fā)語(yǔ)言22.3 android應(yīng)用程序組件22.4 androidmanifest.xml文件4第三章搭建android開發(fā)環(huán)境53.1 安裝jdk53.2 安裝eclipse53.3安裝sdk53.4安裝adt53.5 創(chuàng)建avd6第四章系統(tǒng)的總體設(shè)計(jì)74.1 設(shè)計(jì)思想74.2 系統(tǒng)功能結(jié)構(gòu)圖7第五章音樂播放器的詳細(xì)設(shè)計(jì)115.1項(xiàng)目ui篇115.2開機(jī)動(dòng)畫頁(yè)面的設(shè)計(jì)115.2.1 設(shè)計(jì)步驟115.2.2效果圖125.3基本代碼的編寫125.3
7、.1在service 里定義一系列關(guān)于播放狀態(tài)的常量125.3.2注冊(cè)廣播接收 以及定義廣播的action135.3.3寫發(fā)送廣播(前歌曲的信息及狀態(tài))的一些方法135.3.4播放控制代碼的編寫135.4主頁(yè)面的代碼實(shí)現(xiàn)145.4.1 初始化頁(yè)面的一些基本控件145.4.2 seekbar的更新與監(jiān)聽145.5播放列表頁(yè)面的實(shí)現(xiàn)155.5.1適配器的創(chuàng)建155.5.2 musiclist 中g(shù)etmultidata( )方法的創(chuàng)建155.5.3 點(diǎn)擊列表中的一項(xiàng) 跳轉(zhuǎn)到播放列表 并播放當(dāng)前歌曲155.6 notification功能的實(shí)現(xiàn)165.6.1 創(chuàng)建mynotification 這個(gè)類
8、165.6.2在activity中調(diào)用notifation這個(gè)類165.7菜單功能的實(shí)現(xiàn)165.8 appwidget的實(shí)現(xiàn)175.8.1 appwidget布局頁(yè)面175.8.2 appwidget類的創(chuàng)建18第六章總結(jié)19參考文獻(xiàn)20第一章 引言1.1項(xiàng)目背景android是谷歌于2007年公布的開放式源代碼手機(jī)系統(tǒng),一直受到人們的熱捧。android是基于linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),它開放性就優(yōu)于其他封閉式的手機(jī)系統(tǒng)。因此,任何人都可能根據(jù)自己的喜好將手機(jī)系統(tǒng)中的所有功能重新編寫。這使得越來(lái)越多的人關(guān)注這個(gè)操作系統(tǒng)。本次作品音樂播放器就是基于android平臺(tái)的。 隨著計(jì)算機(jī)的廣
9、泛運(yùn)用,手機(jī)市場(chǎng)的迅速發(fā)展,各種音頻資源也在網(wǎng)上廣為流傳。這些資源卡是平常,但已經(jīng)漸漸成為人們生活中必不可少的一部分了。于是各種手機(jī)播放器也緊跟著發(fā)展起來(lái),但是很多播放器一味最求外觀花俏,功能龐大,對(duì)用戶的手機(jī)造成很多資源浪費(fèi)。比如cpu、內(nèi)存等的占用率過高、在用戶需要多任務(wù)操作時(shí),受到不小的影響,帶來(lái)了許多不便。而對(duì)于大多數(shù)普通用戶,許多功能用不上,形同虛設(shè)。針對(duì)以上各種弊端,選擇了開發(fā)多語(yǔ)種的音頻播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶聽歌的需求?,F(xiàn)今社會(huì)生活緊張,而欣賞音樂史其中最好的舒緩壓力的方式之一。本項(xiàng)目的目的是開發(fā)一個(gè)可以播放主流音樂文件格式的播放器。本設(shè)計(jì)的實(shí)
10、現(xiàn)的這主要功能是播放mp3等音樂文件,并且能夠控制播放器播放、暫停、停止、上一曲、下一曲。界面簡(jiǎn)單,操作簡(jiǎn)單。本項(xiàng)目是一款基于android手機(jī),平臺(tái)的音樂播放器,使android手機(jī)擁有個(gè)性的播放器,讓手機(jī)主人隨時(shí)隨地處于音樂的旋律中。使人們的生活更加多樣化。也使設(shè)計(jì)者更加熟練android的技術(shù)和其它在市場(chǎng)上的特點(diǎn)。1.2 編寫目的現(xiàn)今社會(huì)生活緊張,而欣賞音樂是其中最好的舒緩壓力的方式之一,本項(xiàng)目的目的是開發(fā)一個(gè)可以播放mp3文件格式的播放器,并且可以從服務(wù)器下載歌曲,控制播放,暫停,停止,音量調(diào)節(jié),播放列表和歌曲文件的管理操作等多種播放控制功能,界面簡(jiǎn)明,操作簡(jiǎn)單。本項(xiàng)目是一款基于and
11、roid手機(jī)平臺(tái)的音樂播放器,使android手機(jī)擁有個(gè)性的多媒體播放器,使手機(jī)顯得更加生動(dòng)靈活化,與人們更為接近,讓手機(jī)主人隨時(shí)隨地處于音樂旋律之中。使人們的生活更加多樣化,也使設(shè)計(jì)者更加熟悉基于android平臺(tái)的應(yīng)用布局及開發(fā)模式的特點(diǎn),為以后實(shí)現(xiàn)更復(fù)雜的應(yīng)用打好基礎(chǔ)。第二章 android應(yīng)用軟件開發(fā)基礎(chǔ)2.1 android的基本介紹android一詞的本義指“機(jī)器人”同時(shí)也是google于2007年11月5日宣布的基于linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱。該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。android是基于li
12、nux內(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ā)的是自己的手機(jī)電話產(chǎn)品,而不是一套軟件平臺(tái)。到了2010年1月,google開始
13、發(fā)表自家品牌手機(jī)電話的nexus one。2.2 android應(yīng)用開發(fā)語(yǔ)言java是android上的主流開發(fā)語(yǔ)言,各種支持也最完善。android發(fā)布的api和sdk也都主要是面向java開發(fā)人員的。我們的播放器實(shí)例也是用java開發(fā)的。2.3 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)頁(yè)的程序,那么我們無(wú)需親自編寫瀏覽器,而是可以直接調(diào)用系統(tǒng)自帶的chrome lite瀏覽器組件。又如假設(shè)我們編寫了兩個(gè)應(yīng)用程序,其中一個(gè)程序中有列表顯示圖片
14、的組件,那么我們?cè)诹硗庖粋€(gè)應(yīng)用程序中就可以使用該組件,而不需要再編寫該功能。也就是說,不同于我們平常編寫的程序,android的應(yīng)用程序不是單一入口,而是可以從代碼的不同位置啟動(dòng)。這就要依靠組件來(lái)實(shí)現(xiàn)。 android應(yīng)用程序的組件有以下四種: 1. activity 一個(gè)activity實(shí)際上表現(xiàn)出來(lái)的就是一個(gè)程序的界面。這個(gè)界面可能有許多種不同的形式,比如有列表形式,有文字形式,有圖像格子等形式。一個(gè)應(yīng)用程序也可能有不止一個(gè)activity。比如一個(gè)短消息的程序,需要有列表顯示所有消息的activity,還至少需要一個(gè)編輯短消息的activity(界面),還可能需要設(shè)置、菜單等界面。每個(gè)a
15、ctivity都有一個(gè)默認(rèn)的窗口用于繪制界面,一般情況下,它是充滿全屏的,但是我們可以通過程序控制它,使其小于屏幕大小,也可以控制其浮動(dòng)于其它窗口之上(如android中的toast信息)。 activity中顯示出來(lái)的內(nèi)容其實(shí)是由view堆疊形成的,view是由view基類派生出來(lái)的各種形式的界面元素,如listview,gridview等等,通過組合這些view,就形成了一個(gè)可見的activity。我們可以用activity.setcontentview()方法來(lái)設(shè)置一個(gè)activity中所要顯示的view。2. service service是一種沒有界面的組件,同我們平常在window
16、s或linux系統(tǒng)中所理解的“服務(wù)”一樣,android上的service也是運(yùn)行在后臺(tái)的,運(yùn)行時(shí)間可以從系統(tǒng)啟動(dòng)到系統(tǒng)關(guān)閉為止。對(duì)于許多應(yīng)用程序來(lái)說,service組件是至關(guān)重要的。以下載管理器為例,用戶肯定希望能夠在切換到其它程序時(shí)仍然在后臺(tái)進(jìn)行下載,這就需要用到service完成下載工作。而顯示下載進(jìn)度、已下載文件等信息則由activity完成,同時(shí)我們還希望能控制下載過程,如停止、繼續(xù)等,這就需要activity與service之間進(jìn)行通信。 android允許activity連接到或者綁定到service上,這樣就可以讓用戶在界面上控制后臺(tái)service的行為。 3.broadcas
17、t receiver broadcast意為廣播消息,android系統(tǒng)自身會(huì)發(fā)出許多廣播消息,如電量不足,用戶修改了全局設(shè)置等,各個(gè)應(yīng)用程序也以向整個(gè)系統(tǒng)廣播消息,如文件下載完畢等。 broadcast receiver則是程序中專門用來(lái)接收廣播消息的組件,它沒有界面顯示,只負(fù)責(zé)監(jiān)聽、接收廣播消息,然后根據(jù)程序邏輯,啟動(dòng)其它組件去處理廣播消息。它可以啟動(dòng)一個(gè)activity來(lái)同用戶交互,也可以使用notificationmanager向用戶發(fā)出通知。nitificationmanager的通知形式有許多種,比如說振動(dòng)、響鈴、閃led燈,還可以在android界面的消息欄處顯示信息。 4.co
18、ntent provider content provider是一種為其它應(yīng)用程序提供數(shù)據(jù)的組件。這些數(shù)據(jù)可以保存在文件中,也可以保存在sqlite數(shù)據(jù)庫(kù)中,還可以以其它任何有效的方式保存。contentprovider類為我們提供了一系列保存數(shù)據(jù)的方法供我們調(diào)用,可以很方便地存儲(chǔ)數(shù)據(jù)。其它應(yīng)用程序在需要使用這些數(shù)據(jù)時(shí),可以用contentresolver對(duì)象,使用其中的方法。contentresolver可以與任何content provider交互,獲取其中的數(shù)據(jù)。 只要需要某個(gè)組件,android就會(huì)盡力保證它的可用:如果該組件還沒啟動(dòng),就啟動(dòng)它,如果該組件所屬的應(yīng)用程序還沒擁有一個(gè)進(jìn)程
19、,則為它啟動(dòng)一個(gè)進(jìn)程,如果系統(tǒng)資源不足以容納一個(gè)新的進(jìn)程,則將后臺(tái)的某個(gè)進(jìn)程殺死為新進(jìn)程騰出資源。2.4 androidmanifest.xml文件androidmanifest.xml是每一個(gè)應(yīng)用都需要的文件, 位于應(yīng)用根目錄下,它 描述了程序包的全局變量, 包括暴露的應(yīng)用組件(activities, services等等)和為每個(gè)組件的實(shí)現(xiàn)類, 什么樣的數(shù)據(jù)可以操作,以及在什么地方運(yùn)行。 androidmanifest.xml文件是一個(gè)結(jié)構(gòu)化的xml文件,它除了包含有各個(gè)組件的信息,還包括許多其它的信息,它的基本樣式如下所示: <?xml version="1.0"
20、; encoding="utf-8"?> <manifest . . . > <application . . . > <activity android:name="ject.freneticactivity" android:icon="drawable/small_pic.png" android:label="string/freneticlabel" . . . > </activity> . . . </appli
21、cation> </manifest> 不難看出,name,icon,lable這些屬性就分別指activity的名稱、圖標(biāo)、標(biāo)識(shí)。我們通過manifest描述程序的信息,android系統(tǒng)就能讀取出來(lái)并產(chǎn)生相應(yīng)的行為。第三章 搭建android開發(fā)環(huán)境3.1 安裝jdk由于android開發(fā)是基于java的基礎(chǔ)上的,所以我們必須得安裝jdk(jdk下載地址: 1.右擊計(jì)算機(jī)-屬性-高級(jí)系統(tǒng)設(shè)置-高級(jí)-環(huán)境變量,新建“系統(tǒng)變量”,設(shè)置變量名:“java_home”。變量值:“c:program filesjavajdk1.7.0_02”(視個(gè)人安裝路徑而定)。 2.找到變量名
22、為path的項(xiàng),雙擊,在變量值后面添加:“;%java_home%bin;”, 3.新建“系統(tǒng)變量”變量名:“classpath”,變量值:“.;%java_home%libdt.jar;%java_home%libtools.jar;” 配置完成后,重啟可以在cmd下輸入java或者javac測(cè)試。3.2 安裝eclipseeclipse是我們以后在android開發(fā)時(shí)使用的開發(fā)平臺(tái),它集成了很多功能以及插件,在開發(fā)的過程中便于我們使用,在官網(wǎng)(/downloads/)可以下載到對(duì)應(yīng)系統(tǒng)以及功能的安裝包,在安裝提示安裝完成后并且完成了jdk的安裝后即
23、可正常使用。 3.3安裝sdksdk(software development kit)初始包中有開發(fā)android程序所要用到的工具,它包括了從編譯到運(yùn)行android應(yīng)用程序所需要的各種工具。安裝時(shí)可以根據(jù)自己的需求選擇安裝相應(yīng)的版本。 3.4安裝adt 按照2.3.4安裝完sdk初始包后,就可以開始開發(fā)android應(yīng)用程序了,但是為了更高效地進(jìn)行開發(fā),android團(tuán)隊(duì)推出了android development tools (adt) 。adt是目前開發(fā)android應(yīng)用最有效的工具,它是一個(gè)eclipse插件,支持eclipse 3.4及3.4以上的版本。以eclipse 3.5
24、(galileo)為例,安裝過程如下: 1. 打開eclipse,選擇 help > install new softare。 2. 在available software 對(duì)話框中,點(diǎn)擊add.。 3. 在彈出的add site 對(duì)話框中,任意填寫一個(gè)名字到name一欄。在location一欄,則填入這一url:“https:/dl-4. 返回到available software 窗口后,就能看到列表中出現(xiàn)了"developer tools" ,選中它前面的復(fù)選框,再點(diǎn)擊“next”,就會(huì)開始下載安裝adt的各種組件了。5. 安裝完畢后將彈出窗口顯示adt相關(guān)的各
25、種信息以及許可協(xié)議,點(diǎn)擊“finish“即可完成安裝。6.重新啟動(dòng):eclipse。3.5 創(chuàng)建avd在安裝好jdk,eclipse,sdk,adk之后我們就可以進(jìn)行android項(xiàng)目開發(fā)了,但是在開發(fā)的過程中我們經(jīng)常需要運(yùn)行、調(diào)試我們所開發(fā)的軟件,這就需要用到avd(android virtual device),也就是android虛擬機(jī)。1. 打開eclipse。 2. 點(diǎn)擊opens the android virtual device manager圖標(biāo)按鈕。 3. 在彈出的窗口中點(diǎn)擊new新建一個(gè)android虛擬機(jī)。 4. 在彈出的新建虛擬機(jī)窗口中name一欄填上虛擬機(jī)的名稱(一
26、般與虛擬機(jī)的版本號(hào)相同,便于區(qū)分)。 5. 在target一欄選擇一個(gè)android虛擬機(jī)版本(如android2.2或android2.1)。 6. 在sd card下的size一欄填上我們要設(shè)定的sd卡容量大小。 7. 點(diǎn)擊create avd,這樣我們的一個(gè)android虛擬機(jī)就創(chuàng)建好了。第四章 系統(tǒng)的總體設(shè)計(jì)軟件功能設(shè)計(jì)是使整個(gè)軟件能基本實(shí)現(xiàn)音樂的播放、上一首、下一首、暫停等功能能讓用戶通過本軟件欣賞音樂。在線音樂瀏覽和下載背景皮膚的切換等功能更好的增強(qiáng)用戶體驗(yàn)。4.1 設(shè)計(jì)思想(1)將系統(tǒng)分成幾個(gè)相對(duì)獨(dú)立的模塊。 (2)分層的模塊化程序設(shè)計(jì)思想,整個(gè)系統(tǒng)采用模塊化結(jié)構(gòu)設(shè)計(jì)。作為應(yīng)用程
27、序有較強(qiáng)的可操作性和擴(kuò)展性。(3)合理的數(shù)據(jù)流設(shè)計(jì),在應(yīng)用系統(tǒng)設(shè)計(jì)中,相對(duì)獨(dú)立的模塊間以數(shù)據(jù)流相互連接,使各模塊間的耦合性較低,方便系統(tǒng)運(yùn)行,提高系統(tǒng)安全性。4.2 系統(tǒng)功能結(jié)構(gòu)圖根據(jù)上述需求分析,本android版音樂播放器可分為一下幾個(gè)模塊: 圖4.2.1播放器基本功能圖4.2.2播放清單列表圖4.2.3系統(tǒng)流程圖功能類別子功能子功能播放列表播放列表菜單退出播放從擴(kuò)展卡尋找歌曲歌曲菜單播放->進(jìn)入播放界面刪除->數(shù)據(jù)庫(kù)同步更新重命名->數(shù)據(jù)庫(kù)同步更新向上、下移動(dòng)->數(shù)據(jù)庫(kù)同步更新播放界面播放播放歌曲->線程啟動(dòng)->時(shí)間更新暫停暫停歌曲->線程暫停-
28、>時(shí)間暫停停止停止歌曲->線程停止->時(shí)間停止上一首播放列表索引變化->尋找上一id歌曲下一首播放列表索引變化->尋找下一id歌曲播放界面菜單返回到播放列表返回到主菜單從擴(kuò)展卡尋找歌曲退出播放器隱藏播放界面主菜單退出程序程序退出進(jìn)入播放列表顯示播放列表表4.2.1系統(tǒng)功能表圖4.2.4音樂播放器 e-r圖圖4.2.5音樂播放器菜單結(jié)構(gòu)圖第五章 音樂播放器的詳細(xì)設(shè)計(jì) 5.1項(xiàng)目ui篇1.先實(shí)現(xiàn)播放頁(yè)面的ui設(shè)計(jì)(包括控制按鈕和專輯圖片) 布局代碼 main.xml2.播放列表的實(shí)現(xiàn) 布局代碼 playlist.xml基本效果 如下圖: 其中播放按鈕采用xml文件,在
29、按下和得到焦點(diǎn)的時(shí)候會(huì)做相應(yīng)的改變<selector xmlns:android=" <item android:state_focused="true" android:drawable="drawable/desktop_next_pressed" /> <item android:state_selected="true" android:drawable="drawable/desktop_next_pressed" /> <item android:state
30、_pressed="true" android:drawable="drawable/desktop_next_pressed" /> <item android:drawable="drawable/desktop_next" /> </selector>5.2開機(jī)動(dòng)畫頁(yè)面的設(shè)計(jì)5.2.1 設(shè)計(jì)步驟1. 準(zhǔn)備2個(gè) 動(dòng)畫xml文件 log.xml log_two.xml2. 當(dāng)動(dòng)畫結(jié)束時(shí) 啟動(dòng)另外一個(gè)activity3. 動(dòng)畫特效是兩個(gè)imageview同時(shí)采用 淡入,旋轉(zhuǎn)和,縮放的特效 調(diào)用動(dòng)畫的方法代
31、碼animation animation=animationutils.loadanimation(logo.this, r.anim.logo);5.2.2效果圖5.3基本代碼的編寫5.3.1在service 里定義一系列關(guān)于播放狀態(tài)的常量public static final int cmd_default = -1;/默認(rèn)public static final int cmd_start = 0;/開始public static final int cmd_pause = 1;/暫停public static final int cmd_resume =3;/繼續(xù)播放public sta
32、tic final int cmd_next = 4;/下一首public static final int cmd_prev = 5;/前一首public static final int cmd_seek = 6;/移動(dòng)到某一播放位置public static final int cmd_jump = 7;/選擇列表歌曲 播放public static final int status_playing = 0;/播放狀態(tài)public static final int status_paused = 1;/暫停狀態(tài)public static final int status_stopped
33、= 2;/停止?fàn)顟B(tài)5.3.2注冊(cè)廣播接收 以及定義廣播的actionpublic static final string music_control = "miniplayer.action_control"public static final string update_status = "miniplayer.action_update_status"public static final string update_time = "miniplayer.action_update_time"public static fina
34、l string update_info = "miniplayer.action_update_info"在oncreant里注冊(cè)廣播/ 注冊(cè)receiver-可以xml注冊(cè),也可以代碼注冊(cè)。代碼注冊(cè),當(dāng)程序退出,相關(guān)廣播也就無(wú)效了docommand = new commandreceiver();intentfilter filter = new intentfilter();filter.addaction(music_control);registerreceiver(docommand, filter);注意:在結(jié)束時(shí) 解除廣播的注冊(cè) public void on
35、destroy() unregisterreceiver(docommand); super.ondestroy(); savestatus(); 5.3.3寫發(fā)送廣播(前歌曲的信息及狀態(tài))的一些方法 / 發(fā)送更新的播放狀態(tài)private void updatestatus()/ 發(fā)送更新的歌曲信息private void updateinfo()/ 發(fā)送跟新的播放時(shí)間private void updatetime() 5.3.4播放控制代碼的編寫 init()方法主要是 初始話音樂數(shù)據(jù) 其次就是在廣播里面調(diào)用相應(yīng)的方法play( ) pause( ) previce( )next( )最后注
36、意:在manifest中注冊(cè)service<service android:name=".service.musicservice"></service>5.4主頁(yè)面的代碼實(shí)現(xiàn)5.4.1 初始化頁(yè)面的一些基本控件寫3個(gè)廣播接收的broadcastreceiver分別接收當(dāng)前歌曲的信息 狀態(tài) 以及播放時(shí)間private statusupdatereceiver dostatusupdate;private timeupdatereceiver dotimeupdate;private infoupdatereceiver doinfoupdate;在o
37、ncreat這些broadcastreceiver用于更新頁(yè)面歌曲當(dāng)前信息接下來(lái)是各個(gè)按鈕的點(diǎn)擊事件public void btclick()5.4.2 seekbar的更新與監(jiān)聽 首先在service里寫更新進(jìn)度條的方法updateprogress( ) 方法主要就是開辟一個(gè)線程 每隔一秒鐘更新一次當(dāng)前時(shí)間并且在方法中實(shí)現(xiàn)mediaplayer的監(jiān)聽當(dāng)一首音樂播放完成時(shí),去播放下一首然后就是在activity里對(duì)seekbar的監(jiān)聽 拖拽到某一位置播放核心代碼seekbar.setonseekbarchangelistener(new onseekbarchangelistener( )if
38、 (isenable = false && math.abs(prog - progress) >= 5) progress = prog;intent i = new intent(musicservice.music_control);int cmd = musicservice.cmd_seek;i.putextra("cmd", cmd);i.putextra("progress", progress);sendbroadcast(i);sb.setprogress(progress);5.5播放列表頁(yè)面的實(shí)現(xiàn)5.5.1適配
39、器的創(chuàng)建 第一個(gè)適配器musicinfoadapter()在做適配器之前需要準(zhǔn)備 item的布局文件music_list_item.xml其次是viewholder類的創(chuàng)建 靜態(tài)類中的對(duì)象只會(huì)掉用一次 所以我們布局中的imageview和textview等控件要在靜態(tài)類中創(chuàng)建??梢詼p少內(nèi)存的使用適配器的核心方法就是getview( )的使用其中convertview 的復(fù)用性是listview優(yōu)化顯示的核心完成適配器的創(chuàng)建我們就可以,調(diào)取數(shù)據(jù)來(lái)顯示 效果圖如下 5.5.2 musiclist 中g(shù)etmultidata( )方法的創(chuàng)建通過游標(biāo)查詢系統(tǒng)中media表中的所有音頻文件的信息,保存在
40、map集合中吧數(shù)據(jù)放到適配器中加載 在listview中顯示完成這一步我們的播放器 基本功能已經(jīng)完善的差不多了!5.5.3 點(diǎn)擊列表中的一項(xiàng) 跳轉(zhuǎn)到播放列表 并播放當(dāng)前歌曲首先是listview的itemclick事件的處理照例我們要發(fā)送一個(gè)廣播給service告訴我們點(diǎn)擊的是列表中的哪一首歌曲所以要在service中寫一個(gè)方法去調(diào)用游標(biāo)類,查詢那個(gè)歌曲的信息人后播放也就是把當(dāng)前的位置 賦值給position 核心代碼:intent i = new intent(miniplayerservice.music_control);i.putextra("cmd", minip
41、layerservice.cmd_jump);i.putextra("pos", pos);sendbroadcast(i);finish();5.6 notification功能的實(shí)現(xiàn)5.6.1 創(chuàng)建mynotification 這個(gè)類 該類的主要功能就是現(xiàn)實(shí)通知欄及通知欄狀態(tài)的信息首先要準(zhǔn)備notifation頁(yè)面的布局文件然后在那個(gè)類里吧布局裝載進(jìn)去/ 指定這個(gè)通知的布局文件remoteviews remoteviews = new remoteviews(context.getpackagename(),r.layout.notification);5.6.2在ac
42、tivity中調(diào)用notifation這個(gè)類當(dāng)我們按下播放按鈕 ,就要調(diào)用notifation當(dāng)我們拉開通知欄,點(diǎn)擊notifation視圖,進(jìn)入到播放頁(yè)面其中會(huì)調(diào)用一個(gè)方法/ 指定點(diǎn)擊通知后跳到那個(gè)activitynotification.contentintent = pendingintent.getactivity(context, 0, new intent(context,playactivity.class),pendingintent.flag_update_current);5.7菜單功能的實(shí)現(xiàn)1.在主activity重寫父類的方法oncreateoptionsmenu()2
43、.在oncreateoptionsmenu中添加各種按鈕menu.add(menu.none, -> 所在組的idmenu.first + 1, ->菜單項(xiàng)的id5, -> 在菜單欄的順序 "刷新曲庫(kù)" ->菜單項(xiàng)的名字).seticon(android.r.drawable.ic_menu_search);->指定菜單對(duì)應(yīng)的圖片當(dāng)我們點(diǎn)擊菜單中的某一項(xiàng)時(shí)要進(jìn)行相應(yīng)的處理這里就需要從重父類的onoptionsitemselected(menuitem item) 我們可以根據(jù)item.getitemid()來(lái)分辨那個(gè)是我們點(diǎn)擊的菜單,因?yàn)槲覀冊(cè)?/p>
44、創(chuàng)建菜單的的時(shí)候,就已經(jīng)吧id給寫了 所以那get的id跟那個(gè)id對(duì)比就能知道那個(gè)是我們點(diǎn)擊的菜單。5.8 appwidget的實(shí)現(xiàn)5.8.1 appwidget布局頁(yè)面實(shí)現(xiàn)如圖所示的布局效果布局文件 appwidgetlayout.xml寫完布局文件定義appwidgetprovideinfo的元數(shù)據(jù),需要定義為xml文件,一般在res/下面新建個(gè)xml目錄,然后新建appwidget_info.xml主要有以下屬性 updateperiodmills 為執(zhí)行更新時(shí)間,1.5以后默認(rèn)好像要半小時(shí)(測(cè)試下基本不能時(shí)時(shí)更新)android:previewimage="drawable/
45、preview"和 android:resizemode 3.0以上才能使用 定義顯示圖標(biāo)android:initiallayout="layout/example_appwidget" 為該app widget頁(yè)面顯示的內(nèi)容5.8.2 appwidget類的創(chuàng)建定義一個(gè)appwidgetprovider 得子類在manfiest中注冊(cè)appwidget app widget 是通過廣播機(jī)制進(jìn)行傳播的eiver android:name 定義的appwidgetprovider類<action android:name 因?yàn)橥ㄟ^廣播機(jī)制實(shí)現(xiàn),所以 默認(rèn)的ac
46、tion不能變,主要有android:resource 調(diào)用一個(gè)appwidget之后我們要去重寫父類的幾個(gè)方法public void onreceive(context context, intent intent) onreceive方法就是接受系統(tǒng)相應(yīng)的廣播 public void onupdate(context context, appwidgetmanager appwidgetmanager,int appwidgetids) onupdate( )就是當(dāng)我們點(diǎn)擊桌面的appwidget的控件時(shí) 調(diào)用的相應(yīng)的方法寫完了這些我們就要在service中去注冊(cè)相應(yīng)的廣播接受 去控制當(dāng)前
47、的音樂播放首先要在service中的oncreat方法中注冊(cè)相應(yīng)的廣播/注冊(cè)appwidgetn廣播intentfilter filter1 = new intentfilter();filter1.addaction("com.tarena.playmusic");filter1.addaction("com.tarena.nextone");filter1.addaction("com.tarena.lastone");filter1.addaction("com.tarena.startapp");regis
48、terreceiver(appwidgetreceiver, filter1);注冊(cè)完廣播類之后 我們就要在service 寫光廣播的接收類protected broadcastreceiver appwidgetreceiver = new broadcastreceiver() overridepublic void onreceive(context context, intent intent) string action= intent.getaction();在這里根據(jù)接收到的action 去做相應(yīng)的邏輯處理第六章 總結(jié)首先應(yīng)該說的是:要感謝這次課程設(shè)計(jì),因?yàn)橥ㄟ^這次課程設(shè)計(jì)讓我對(duì)
49、android的開發(fā)又有了更進(jìn)一步的認(rèn)識(shí),例如以前不懂得tabhost布局這個(gè)容器通過這次例子我明白了它在制作動(dòng)態(tài)菜單這方面具有重要的意義,還有以前不明白怎么使音樂播放器具有后臺(tái)播放的功能,在老師的提示要使用到android提供的一個(gè)service方法后,我通過在網(wǎng)上下載的android相關(guān)學(xué)習(xí)的視頻和一些網(wǎng)上用到的相關(guān)的例子終于明白了其實(shí)現(xiàn)的方法從創(chuàng)建一個(gè)service到摧毀destory終止service。在一開始我并不知道怎么去實(shí)現(xiàn)音樂后臺(tái)播放功能,但是接觸了service后我知道,將playmusic中用到的啟動(dòng)暫停等按鈕在控制音樂播放器功能的按鈕的事件放在service中然后通過外在類調(diào)用其st
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024特崗教師聘用及教師團(tuán)隊(duì)協(xié)作能力提升服務(wù)合同3篇
- 2025年度新能源車輛采購(gòu)及維護(hù)服務(wù)合同范本2篇
- 2025年度智能家居系統(tǒng)代理商合作協(xié)議4篇
- 2025年度新能源汽車研發(fā)出資人合作協(xié)議4篇
- 2025年度旅游景區(qū)特色商品檔口租賃經(jīng)營(yíng)合同3篇
- 2025年度水電工程安全監(jiān)測(cè)系統(tǒng)安裝與維護(hù)服務(wù)合同3篇
- 2024版食堂承包合同協(xié)議范文
- 2025年度特殊崗位人員辭退及安置協(xié)議范本4篇
- 2025年度智能機(jī)器人研發(fā)股權(quán)合作協(xié)議4篇
- 2025年度文化產(chǎn)業(yè)園區(qū)運(yùn)營(yíng)管理合同3篇
- 小學(xué)數(shù)學(xué)六年級(jí)解方程練習(xí)300題及答案
- 電抗器噪聲控制與減振技術(shù)
- 中醫(yī)健康宣教手冊(cè)
- 2024年江蘇揚(yáng)州市高郵市國(guó)有企業(yè)招聘筆試參考題庫(kù)附帶答案詳解
- 消費(fèi)醫(yī)療行業(yè)報(bào)告
- 品學(xué)課堂新范式
- GB/T 1196-2023重熔用鋁錠
- 運(yùn)輸行業(yè)員工崗前安全培訓(xùn)
- 公路工程安全風(fēng)險(xiǎn)辨識(shí)與防控手冊(cè)
- 幼兒園教師培訓(xùn):計(jì)數(shù)(數(shù)數(shù))的核心經(jīng)驗(yàn)
- 如何撰寫和發(fā)表高水平的科研論文-good ppt
評(píng)論
0/150
提交評(píng)論