基于Android系統(tǒng)的多媒體播放器的開發(fā)_第1頁
基于Android系統(tǒng)的多媒體播放器的開發(fā)_第2頁
基于Android系統(tǒng)的多媒體播放器的開發(fā)_第3頁
基于Android系統(tǒng)的多媒體播放器的開發(fā)_第4頁
基于Android系統(tǒng)的多媒體播放器的開發(fā)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

華南農(nóng)業(yè)大學(xué)珠江學(xué)院畢業(yè)論文〔設(shè)計〕基于Android系統(tǒng)的多媒體播放器的開發(fā)——功能實現(xiàn)指導(dǎo)教師:系:信息工程系年級專業(yè):_08級計算機科學(xué)與技術(shù)提交日期:辯論日期:辯論委員會主席〔簽名〕:評閱人〔簽名〕:年月日摘要在這個經(jīng)濟飛速開展的時代,移動設(shè)備也日益完善,我們大家都已經(jīng)有了在上聽音樂看電影的習(xí)慣,在中國大陸,谷歌發(fā)布的Android因其系統(tǒng)的優(yōu)越性,得以迅速推廣,隨著Android智能的普及,各種基于Android的應(yīng)用軟件也如雨后春筍般出現(xiàn)了。本文主要是對Android系統(tǒng)上的一款多媒體播放器應(yīng)用程序的設(shè)計與實現(xiàn)進(jìn)行闡述。Android是一個開源的系統(tǒng),它的底層是基于Linux操作系統(tǒng)的,本論文的多媒體播放器采用了Android開源系統(tǒng)技術(shù),利用Java語言和Eclipse開發(fā)工具來實現(xiàn)這款播放器。同時給出了詳細(xì)的系統(tǒng)設(shè)計設(shè)計過程、局部界面截圖以及主要功能運行流程圖,文中還對開發(fā)過程中遇到的問題及解決方案進(jìn)行了討論。該多媒體播放器集音頻、視頻播放于一體,音頻播放局部實現(xiàn)了播放、暫停、上一首、下一首、音量調(diào)節(jié)、歌詞同步顯示、播放模式選擇等功能。性能良好,用戶交互友好,在Android系統(tǒng)中能獨立運行;視頻播放局部實現(xiàn)了一般控制功能以外,還支持不同視頻畫面比例的切換等功能。針對Android應(yīng)用程序的開發(fā),是適應(yīng)時代要求的,比照時下硬件的開展速度,應(yīng)用軟件的研發(fā)還有很長的路要走。關(guān)鍵詞:Android;開源系統(tǒng);多媒體播放器;應(yīng)用程序AbstractInthiseconomicrapiddevelopmentofTheTimes,mobileequipmentisincreasinglyperfect,weallhavetolistentomusicontheirmoviehabit,inmainlandChina,Google'sAndroidmobilephonesreleasedbecauseofitsmobilephonesystem,thesuperiorityoftherapidpromotion,alongwithAndroidsmartphonepopularization,basedontheapplicationofvariousAndroidsoftwareashavesprungup.ThispaperismainlytotheAndroidsystemonamultimediaplayerapplicationdesignandimplementationinthispaper.Androidisanopensourcesystem,whichisbasedonthebottomoftheLinuxoperatingsystem,thispaperusedthemediaplayertheAndroidopensourcesystemtechnology,useJavalanguageandEclipsedevelopmenttooltoachievethistypeofplayer.Andpresentsthedetaileddesignofthesystemdesignprocess,partoftheinterfacescreenshotsandmainfunctionoperationflowdiagram,thepaperalsotodevelopmentintheprocessofproblemsandsolutionsarediscussed.Themultimediaplayersetaudio,videobroadcastatanorganicwhole,audiopartrealizetheplay,pause,up,down,thesoundvolume,lyricssynchronousdisplayandplaymodeselectionetc.Function.Performanceisgood,theuserinteractionfriendly,intheAndroidsystemcanoperateindependently;Videobroadcastrealizedthegeneralcontrolfunctionofoutside,alsosupportthedifferentvideoimagesoftheproportionoftheswitchetc.Function.ForAndroidapplicationsdevelopment,istomeetthedemandsoftheeraof,thecontrastofthedevelopmentspeedofthecurrenthardware,applicationsoftwaredevelopmenthavealongwaytogo.Keywords:Android;Opensourcesystem;Multimediaplayer;application設(shè)計說明1工程概況我們小組選擇這個工程——“基于Android系統(tǒng)的多媒體播放器的開發(fā)〞為我們的畢業(yè)設(shè)計課題。該工程要求完成一個便攜式移動設(shè)備〔如〕的多媒體播放器的設(shè)計與實現(xiàn)。隨著經(jīng)濟社會的快速開展,3G網(wǎng)絡(luò)應(yīng)用也迅速推廣,各種智能充滿著市場,已經(jīng)是人類生活中不可或缺的一局部了。人們除了利用作為一種普通通訊工具,也用作生活娛樂設(shè)備。利用上安裝的播放器來播放視頻、音樂已成為人們?nèi)粘I畹闹饕顒又?。本工程完成多媒體播放器的開發(fā),并能將一些個性化設(shè)計融入其中。能完成該軟件的多線程管理,實現(xiàn)該多媒體播放器的后臺播放和后臺Service控制。要求軟件界面設(shè)計應(yīng)簡潔、易于上手,交互設(shè)計友好、人性化、個性化,能會聚用戶的忠誠度。2設(shè)計理念A(yù)ndroid系統(tǒng)UI設(shè)計理念:?干凈而不過簡單?關(guān)注內(nèi)容而非修飾?保存一致,讓用戶容易投入其中,可附加少許變化?使用云端效勞〔存儲和同步用戶資料〕來加強用戶體驗播放器界面簡約大方,時尚而不缺乏美感,用最簡單的布局方式呈現(xiàn)出最好的效果;播放器的功能設(shè)計簡單,但又不缺乏實用性,而且容易操作,易于上手。首先,播放器主界面以炫黑為主色調(diào),背景是別具特色的標(biāo)志為SkyPlayer的圖片,給人一種簡約的時尚感,也讓人加深對SkyPlayer這個播放器的印象。播放器的子界面和其他功能界面的設(shè)計也都別具匠心,從不同視角給用戶不一樣的視覺感受。其次,為了適應(yīng)大多數(shù)用戶的使用習(xí)慣,我們將多媒體播放器的功能細(xì)分為音頻播放器和視頻播放器,用戶可以在進(jìn)入主界面之后根據(jù)自己的需要選擇。3設(shè)計規(guī)劃及設(shè)計方法我們將分為兩局部設(shè)計該款播放器,第一局部為音頻播放器,第二局部為視頻播放器。參照當(dāng)今主流播放器來設(shè)計我們自己的播放器,在功能上追求簡單實用,去掉繁瑣復(fù)雜但卻未被大多數(shù)用戶所使用的功能模塊。播放器的界面設(shè)計主要通過XML文件來布局,采用相對布局和線性布局相結(jié)合的方法。界面所用到的背景圖片或控件一局部自己設(shè)計,一局部直接調(diào)用系統(tǒng)自帶的,以減少不必要的工作量。播放器的功能編碼主要基于Eclipse+SDK平臺,采用java面向?qū)ο笳Z言來實現(xiàn)。首先建立一個Android工程,將不同功能的類放在不同的包里,使整個工程結(jié)構(gòu)清晰明了,便于系統(tǒng)調(diào)試與整改。4設(shè)計標(biāo)準(zhǔn)及原那么Android軟件設(shè)計應(yīng)遵循一定的標(biāo)準(zhǔn)和原那么。優(yōu)秀UI設(shè)計準(zhǔn)那么?關(guān)注用戶?顯示正確的內(nèi)容?給予用戶適當(dāng)?shù)幕仞?有章可循的行為模式?容忍錯誤系統(tǒng)軟件是控制和協(xié)調(diào)計算機以及外部設(shè)備,支持應(yīng)用的軟件開發(fā)和運行的系統(tǒng),是不需要用戶干預(yù)的各種程序的集合。主要功能是調(diào)度、監(jiān)控和維護(hù)計算機系統(tǒng),負(fù)責(zé)管理計算機系統(tǒng)中各種獨立的硬件,使得它們可以協(xié)調(diào)工作。所以,可以說軟件系統(tǒng)是連接需求分析、硬件系統(tǒng)以及使得系統(tǒng)實現(xiàn)的橋梁,對軟件的設(shè)計應(yīng)首先了解軟件設(shè)計的設(shè)計原那么:(1)可靠性用軟件系統(tǒng)規(guī)模越做越大越復(fù)雜,其可靠性越來越難保證。應(yīng)用本身對系統(tǒng)運行的可靠性要求越來越高,軟件系統(tǒng)的可靠性也直接關(guān)系到設(shè)計自身的聲譽和生存開展競爭能力。軟件可靠性意味著該軟件在測試運行過程中防止可能發(fā)生故障的能力,且一旦發(fā)生故障后,具有解脫和排除故障的能力。軟件可靠性和硬件可靠性本質(zhì)區(qū)別在于:后者為物理機理的衰變和老化所致,而前者是由于設(shè)計和實現(xiàn)的錯誤所致。故軟件的可靠性必須在設(shè)計階段就確定,在生產(chǎn)和測試階段再考慮就困難了。(2)健壯性健壯性又稱魯棒性,是指軟件對于標(biāo)準(zhǔn)要求以外的輸入能夠判斷出這個輸入不符合標(biāo)準(zhǔn)要求,并能有合理的處理方式。軟件健壯性是一個比擬模糊的概念,但是卻是非常重要的軟件外部量度標(biāo)準(zhǔn)。軟件設(shè)計的健壯與否直接反響了分析設(shè)計和編碼人員的水平。(3)可修改性要求以科學(xué)的方法設(shè)計軟件,使之有良好的結(jié)構(gòu)和完備的文檔,系統(tǒng)性能易于調(diào)整。(4)容易理解軟件的可理解性是其可靠性和可修改性的前提。它并不僅僅是文檔清晰可讀的問題,更要求軟件本身具有簡單明了的結(jié)構(gòu)。這在很大程度上取決于設(shè)計者的洞察力和創(chuàng)造性,以及對設(shè)計對象掌握得透徹程度,當(dāng)然它還依賴于設(shè)計工具和方法的適當(dāng)運用。(5)程序簡便(6)可測試性可測試性就是設(shè)計一個適當(dāng)?shù)臄?shù)據(jù)集合,用來測試所建立的系統(tǒng),并保證系統(tǒng)得到全面的檢驗。(7)效率性軟件的效率性一般用程序的執(zhí)行時間和所占用的內(nèi)存容量來度量。在到達(dá)原理要求功能指標(biāo)的前提下,程序運行所需時間愈短和占用存儲容量愈小,那么效率愈高?!?〕標(biāo)準(zhǔn)化原那么在結(jié)構(gòu)上實現(xiàn)開放,基于業(yè)界開放式標(biāo)準(zhǔn),符合國家和信息產(chǎn)業(yè)部的標(biāo)準(zhǔn)。〔9〕先進(jìn)性滿足客戶需求,系統(tǒng)性能可靠,易于維護(hù)。〔10〕可擴展性軟件設(shè)計完要留有升級接口和升級空間。5主要技術(shù)資料在安卓軟件開發(fā)中,AndroidAPI文檔是最正確的文檔資料,地址是ge-summary.html,互聯(lián)網(wǎng)上也有很多中國學(xué)者翻譯出來的中文API文檔可供下載。關(guān)鍵詞:Android;多媒體播放器;交互設(shè)計;軟件設(shè)計原那么目錄1緒論 11.1課題背景 11.2課題目的與意義 21.3本文組織結(jié)構(gòu) 22Android平臺概述 32.1什么是Android? 32.1.1Android簡介 32.1.2AndroidFeatures特性 42.1.3Android根本框架〔AndroidArchitecture〕 52.1.4Android系統(tǒng)的四大組件 72.2搭建Android開發(fā)環(huán)境 83系統(tǒng)分析 103.1功能需求分析 103.1.1播放器的根本控制需求 103.1.2媒體文件列表的獲取 143.1.3數(shù)據(jù)源分析 143.2系統(tǒng)界面需求 143.4系統(tǒng)性能需求 153.5運行環(huán)境需求 164系統(tǒng)設(shè)計 164.1系統(tǒng)功能實現(xiàn)過程〔時序圖〕和系統(tǒng)流程圖 164.1.1系統(tǒng)功能時序圖 174.1.2多媒體播放器的系統(tǒng)流程圖 184.2系統(tǒng)功能表和系統(tǒng)功能結(jié)構(gòu)圖 195系統(tǒng)功能實現(xiàn) 215.1播放器主界面功能實現(xiàn) 215.1.1音頻播放器主界面的實現(xiàn) 215.1.2視頻播放器主界面 215.1.3播放器一般功能的實現(xiàn) 225.2獲取媒體文件列表 225.3菜單功能 265.4音樂播放器其他功能 275.4.1歌詞同步顯示 275.4.2播放模式切換 285.4.3甩歌功能 295.5視頻播放器其他功能 315.5.1視頻顯示比例的切換 316系統(tǒng)測試 326.1單元測試一 326.2單元測試二 33測試用例設(shè)計 347結(jié)論與展望 36參考文獻(xiàn) 37致謝 38附錄 39附錄A名詞術(shù)語 39附錄BAndroid播放器工程局部源碼 391音頻播放器效勞器端代碼MusicService.java 392MusicActivity.java源碼 491緒論1.1課題背景當(dāng)今社會的生活節(jié)奏越來越快,人們對的要求也越來越高,由于市場開展迅速,使得操作系統(tǒng)也出現(xiàn)了不同各類,現(xiàn)在市場上主流的操作系統(tǒng)有Windowsmobile,sysbian,以及谷歌的Android操作系統(tǒng),其中占有開放源代碼有事的Android系統(tǒng)具有廣闊的開展前景,已經(jīng)和國內(nèi)外諸多廠家開展了合作。那么能否在上擁有自己編寫的個性多媒體播放器呢?答案是肯定的,谷歌Android系統(tǒng)就能做到。本文所介紹的多媒體播放器就是基于谷歌Android平臺的播放器,我們把它命名為SkyPlayer。Android操作系統(tǒng)是谷歌于2007年公布的開放式源代碼系統(tǒng),它的開放性相對有其它封閉式系統(tǒng)擁有明顯的優(yōu)勢,任何人都可以根據(jù)自己的喜好和需求將Android系統(tǒng)的功能進(jìn)行改進(jìn),在Android平臺上開發(fā)屬于自己的應(yīng)用軟件。這也讓更多的人對這一操作系統(tǒng)有了更濃厚的興趣。我們開發(fā)的這款多媒體播放器就是基于Android平臺的。隨著計算機的廣泛應(yīng)用,市場的迅速開展,各種音頻視頻資源也在網(wǎng)上廣為流傳,這些資源看似平常,但已逐漸成為了人們生活中必不可少的一局部了。于是各種播放器相繼被開發(fā)出來,但是很多播放器一味追求外觀花俏,功能過于龐大,導(dǎo)致用戶資源被過度占用,造成資源浪費。比方說CPU,內(nèi)存等占用率過高,在用戶執(zhí)行多任務(wù)操作時經(jīng)常出現(xiàn)卡機甚至是死機的現(xiàn)象。其實對于大多數(shù)普通用戶,很多功能都是形同虛設(shè)。針對以上各種弊端,我們選擇了開發(fā)一種功能實用,用戶交互友好的多媒體播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶〔如聽歌,看電影〕的需求。我們研究了市場上主流的播放器,了解它們各自的插件及編碼方式,分析了各種開發(fā)方式的優(yōu)缺點,從可行性分析出發(fā),找出一條適合自己的開發(fā)之路,編寫出功能實用,使用方便,占用資源小的播放器。目前已經(jīng)實現(xiàn)的功能有能播放常見音視頻文件的功能,如MP3,WAV,MP4,3GP等,自動獲取用戶SD卡上的音視頻文件,具備一般播放器的功能,如播放、暫停、上一首、下一首、音量調(diào)節(jié)、歌詞同步顯示等。播放模式也比擬完善,有單曲,順序,循環(huán)〔默認(rèn)〕,隨機播放模式。1.2課題目的與意義隨著人們生活節(jié)奏地加快,物質(zhì)生活也越來越豐富了,然而許多人精神上的狀態(tài)都是比擬緊張的,偶爾聽聽歌曲,看看電影也不失為一種好的舒緩壓力的方式。本工程的研究目的是開發(fā)一款可以播放主流音頻和視頻文件的多媒體播放器,并且能夠控制播放,暫停,停止,上一首,下一首,音量調(diào)節(jié),歌詞顯示,界面清新友好,操作簡單。易于用戶上手。本工程是一款基于Android平臺的多媒體播放器,能將一些個性化設(shè)計融入其中。能完成該軟件的多線程管理,實現(xiàn)該多媒體播放器的后臺播放和后臺Service控制。要求軟件界面設(shè)計應(yīng)簡潔、易于上手,交互設(shè)計友好、人性化、個性化,能會聚用戶的忠誠度。1.3本文組織結(jié)構(gòu)表1.1論文組織結(jié)構(gòu)表章節(jié)名稱內(nèi)容簡介1緒論介紹課題的背景與要完成的工作2Android平臺概述介紹Android系統(tǒng)相關(guān)理論和平臺搭建3系統(tǒng)分析對系統(tǒng)進(jìn)行需求分析、可行性分析和功能分析4系統(tǒng)設(shè)計介紹系統(tǒng)功能模塊設(shè)計5系統(tǒng)功能實現(xiàn)闡述具體的實現(xiàn)方法6系統(tǒng)測試主要為單元測試,從調(diào)試到實現(xiàn)系統(tǒng)的概況7結(jié)論與展望對本系統(tǒng)的分析、總結(jié)及展望2Android平臺概述本章主要講述Android系統(tǒng)的應(yīng)用背景以及相關(guān)技術(shù)框架,了解安卓的開展史及相關(guān)平臺知識,有助于我們更好地掌握Android開發(fā)的技巧。2.1什么是Android?圖2.1AndroidLogo〔機器人〕2.1.1Android簡介Android一詞的本義指“機器人〞,同時也是Google于2007年11月Android是一種以Linux為根底的開放源碼操作系統(tǒng),主要使用于便攜設(shè)備。目前尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓〞或“安致〞。Android操作系統(tǒng)最初由AndyRubin開發(fā),最初主要支持。2005年由Google收購注資,并組建開放聯(lián)盟開發(fā)改進(jìn),逐漸擴展到平板電腦及其他領(lǐng)域上。Android的主要競爭對手是蘋果公司的iOS以及RIM的BlackberryOS。2021年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。2021年2月數(shù)據(jù),Android占據(jù)全球智能操作系統(tǒng)市場52.5%的份額,中國市場占有率為68.4%。2.1.2AndroidFeatures特性Android系統(tǒng)有如下的幾大特性:?應(yīng)用程序框架支持組件的重用與替換?Dalvik虛擬機專門為移動設(shè)備做了優(yōu)化?內(nèi)部集成瀏覽器該瀏覽器基于開源的WebKit引擎?優(yōu)化的圖形庫包括2D和3D圖形庫,3D圖形庫基于OpenGLES?SQLite用作結(jié)構(gòu)化的數(shù)據(jù)存儲?多媒體支持包括常見的音頻、視頻和靜態(tài)印象文件格式〔如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF〕?GSM〔依賴于硬件〕?藍(lán)牙Bluetooth,EDGE,3G,andWiFi〔依賴于硬件〕?照相機,GPS,指南針,和加速度計〔依賴于硬件〕?豐富的開發(fā)環(huán)境包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件2.1.3Android根本框架〔AndroidArchitecture〕圖2.2Android結(jié)構(gòu)ApplicationsAndroid會同一個核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是用JAVA編寫的。ApplicationFrameWork開發(fā)者完全可以訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來簡化組件軟件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊〔不過得遵循框架的平安性限制〕。該應(yīng)用程序重用機制使得組建可以被用戶替換。所有的應(yīng)用程序都由一系列的效勞和系統(tǒng)組成,包括:·可擴展的視圖〔Views〕可以用來建應(yīng)用程序,包括列表〔lists〕,網(wǎng)格〔grids〕,文本框〔textboxes〕,按鈕〔buttons〕,甚至包括一個可嵌入的web瀏覽器?!?nèi)容管理器〔ContentProviders〕使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)〔如聯(lián)系人數(shù)據(jù)庫〕,或者共享它們自己的數(shù)據(jù)?!べY源管理器〔ResourceManager〕提供非代碼資源的訪問,如本地字符串,圖形,和分層文件〔layoutfiles〕?!ねㄖ芾砥鳌睳otificationManager〕使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息?!せ顒宇惞芾砥鳌睞ctivityManager〕用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。Libraries庫Android包括一個被Android系統(tǒng)中各種不同組件所使用的C/C++庫集。該庫通過Android應(yīng)用程序框架為開發(fā)者提供效勞。以下是一些主要的核心庫:

系統(tǒng)C庫-一個從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫〔libc〕,專門為基于embeddedlinux的設(shè)備定制。媒體庫-基于PacketVideoOpenCORE;該庫支持錄放,并且可以錄制許多流行的音頻視頻格式,還有靜態(tài)印像文件包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。SurfaceManager-對顯示子系統(tǒng)的管理,并且為多個應(yīng)用程序提供2D和3D圖層的無縫融合。LibWebCore-一個最新的web瀏覽器引擎用來支持Android瀏覽器和一個可嵌入的web視圖。SGL-一個內(nèi)置的2D圖形引擎3Dlibraries-基于OpenGLES1.0APIs實現(xiàn);該庫可以使用硬件3D加速〔如果可用〕或者使用高度優(yōu)化的3D軟加速。FreeType-位圖〔bitmap〕和向量〔vector〕字體顯示。SQLite一個對于所有應(yīng)用程序可用,功能強勁的輕型關(guān)系型數(shù)據(jù)庫引擎。AndroidRuntimeAndroid包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。

每一個Android應(yīng)用程序都在它自己的進(jìn)程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik是針對于同時高效地運行多個VMs來實現(xiàn)的。Dalvik虛擬機執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對最小內(nèi)存使用做了優(yōu)化。該虛擬機是基于存放器的,所有的類都經(jīng)由JAVA匯編器編譯,然后通過SDK中的dx工具轉(zhuǎn)化成.dex格式由虛擬機執(zhí)行。

Dalvik虛擬機依賴于linux的一些功能,比方線程機制和底層內(nèi)存管理機制。Linux內(nèi)核Android是運行于Linuxkernel之上,但并不是GNU/Linux。因為在一般GNU/Linux里支持的功能,Android大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了到達(dá)商業(yè)應(yīng)用,必須移除被GNUGPL授權(quán)證所約束的部份,例如Android將驅(qū)動程序移到userspace,使得Linuxdriver與Linuxkernel徹底分開。bionic/libc/kernel/并非標(biāo)準(zhǔn)的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所產(chǎn)生的,這樣做是為了保存常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。目前Android的Linuxkernel控制包括平安〔Security〕,存儲器管理〔MemoryManagement〕,程序管理〔ProcessManagement〕,網(wǎng)絡(luò)堆?!睳etworkStack〕,驅(qū)動程序模型〔DriverModel〕等。下載Android源碼之前,先要安裝其構(gòu)建工具Repo來初始化源碼。Repo是Android用來輔助Git工作的一個工具。2.1.4Android系統(tǒng)的四大組件在Android系統(tǒng)中,為我們提供了四大根本組件,每個組件是一個視圖,但是有些是可見的,有些是不可見的視圖,像Activity,ContentProvider是可見的視圖,Service和BroadcastReceiver是不可見的,它們只在系統(tǒng)的后臺運行。下面分別介紹四大組件:Activity簡介在Android系統(tǒng)中Activity提供可視化的用戶界面,一個Android應(yīng)用通常由多個Activity組成。多個Activity組成了Activity?!睸tack〕,當(dāng)前活動的Activity處于棧頂。Activity有自己的生命周期,由Android系統(tǒng)來控制。Service簡介顧名思義Service就是運行在后臺的一種效勞程序,一般很少和用戶交互,因此沒有可視化界面定義一個Service類比擬簡單,只要繼承Service類,實現(xiàn)其生命周期中的方法就可以了。一個定義好的Service必須在AndroidManifest.xml配置文件注冊,通過<service>元素聲明才能使用.Service有自己的生命周期,我們可以調(diào)用startService()啟動一個Service或者bindService()方法來綁定一個存在的Service。BroadcastReceiver簡介BroadcastReceiver顧名思義播送接收器,它和事件處理機制類似,只不過事件處理機制是程序組件級別的〔例如,某個按鈕的單擊事件〕,而播送事件處理機制是系統(tǒng)級別的。到目前為止我們可以使用Intent來啟動一個程序組件,我們還可以通過使用sendBroadcast()方法來發(fā)起一個系統(tǒng)級別的事件播送來傳遞消息。我們可以在你的應(yīng)用程序中實現(xiàn)BroadcastReceiver來監(jiān)聽和響應(yīng)這些播送的Intent。ContentProvider簡介ContentProvider用來保存和檢索數(shù)據(jù),并且使應(yīng)用程序之間相互訪問數(shù)據(jù)成為可能。它是跨應(yīng)用程序共享數(shù)據(jù)的唯一方法。Android為常用的數(shù)據(jù)類型〔如:音視頻、圖片和聯(lián)系方式等〕提供了大量的ContentProvider。它們被定義在vider包下面。通過這樣定義好的ContentProvider我們可以方便的進(jìn)行數(shù)據(jù)操作。當(dāng)然我們必須擁有適當(dāng)?shù)臋?quán)限。我們也可以自己來定ContentProvider共享我們的數(shù)據(jù),方便用戶的訪問。2.2搭建Android開發(fā)環(huán)境任何事物要運行,都需要有它自身的環(huán)境配置,Android也不例外,下面就來簡單講解一下在Windows7系統(tǒng)環(huán)境下Android開發(fā)平臺的搭建。搭建開發(fā)環(huán)境需要的軟件有:1.PC操作系統(tǒng):Windows72.軟件包:AndroidSDK〔SoftwareDevelopmentkit〕、ADT-以上〔AndroidDevelopmentTool〕3.IDE環(huán)境:EclipseIDE+ADTEclipse3.5以上4.JDK:〔JRE〕JavaRuntimeEnvironment虛擬機、(JDK)JavaDevelopmentkit安裝步驟如下:安裝JDK在SUN官網(wǎng)下載,網(wǎng)址為,然后找到適合自己系統(tǒng)的安裝文件jdk-7u1-windows-x64.exe,下載完成后安裝。然后在CMD窗口輸入java–version檢測是否安裝成功,如果未能成功那么需要自己手動在系統(tǒng)環(huán)境變量新建一個“JAVA_HOME〞變量,變量值設(shè)置為JDK安裝目錄即可。再新建一個classpath變量,值設(shè)置為“.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar〞,然后找到PATH變量,在值的最前面加上“%JAVA_HOME%/bin;〞〔環(huán)境變量在我的電腦高級系統(tǒng)設(shè)置屬性那里設(shè)置〕。安裝Eclipse進(jìn)入Eclipse下載頁面,選擇EclipseIDEforJavaDevelopers,下載完成后解壓縮即可使用。首次翻開可選擇自己的工作站點。安裝AndroidSDK翻開Android開發(fā)者社區(qū)網(wǎng)址,轉(zhuǎn)到SDK下載頁面即可下載android-sdk_r17-windows.zip,下載后解壓縮,將解壓后的tools目錄絕對路徑添加到系統(tǒng)變量SDK_HOME中,并在PATH系統(tǒng)變量前面加上“%SDK_HOME%\tools;〞在CMD窗口中輸入測試命令android–h驗證是否安裝成功。安裝ADT這里我們不建議聯(lián)網(wǎng)安裝,因為通常都會失敗,被屏蔽了。我們可以下去下載ADT包,然后手動導(dǎo)入安裝。翻開Eclipse→help→InstallNewSoftware,單擊Add…→Local,將已下載好的ADT包導(dǎo)入,然后選中所有可用插件,安裝。安裝過程比擬慢,需要耐心等待。開發(fā)環(huán)境驗證及安卓模擬器〔AVD〕的創(chuàng)立根本軟件安裝完畢以后,翻開Eclipse依次選擇File→New→Project會看見Android工程,創(chuàng)立一個新的工程。至此,我們的開發(fā)環(huán)境就搭建好了。還有就是創(chuàng)立AVD,可以選擇在命令行中創(chuàng)立也可以在Eclipse→Window→AVDManager中新建模擬器。3系統(tǒng)分析3.1功能需求分析根據(jù)工程的預(yù)期目標(biāo),我們可以獲得工程系統(tǒng)的根本需求,以下從不同角度來描述系統(tǒng)的需求,并且使用用例圖來描述系統(tǒng)的功能需求,我們分成四局部來概括,即播放器的根本控制需求,媒體文件列表的獲取,交互友好性設(shè)計和播放器擴展卡需求。以下分別描述:3.1.1播放器的根本控制需求我們把多媒體播放器的功能細(xì)分成音頻播放器和視頻播放器兩局部,音樂播放器主要有播放、暫停、上一首、下一首、第一首、最后一首、音量控制等功能;視頻播放器主要有播放、暫停、上一個、下一個、音量控制、全屏切換等等。分別對這兩局部的控制功能作出分析,如圖3.1〔音頻控制〕和圖3.2〔視頻控制〕。圖3.1音頻播放器根本控制圖圖3.2視頻播放器根本控制圖表3.1“播放〞用例說明參與者用例說明用戶用例名稱:播放音樂/視頻目標(biāo):使得用戶可以播放在媒體列表中選中的音頻/視頻文件前置條件:播放器正在運行根本領(lǐng)件流:①用戶單擊“播放〞按鈕②播放當(dāng)前選中音樂/視頻表3.2“暫停〞用例說明參與者用例說明用戶用例名稱:暫停音樂/視頻目標(biāo):使得用戶可以暫停正在播放的音頻/視頻文件前置條件:音樂/視頻正在播放根本領(lǐng)件流:①用戶單擊“暫停〞按鈕②暫停當(dāng)前音樂/視頻表3.3“切換上/下首〞用例說明參與者用例說明用戶用例名稱:切換上一個/下一個音樂/視頻目標(biāo):使得用戶可以切換到上一個/下一個音樂/視頻前置條件:音樂/視頻正在播放或暫停根本領(lǐng)件流:①用戶單擊“上個/下個〞按鈕②播放上一個/下一個音樂/視頻表3.4“切換第一/最后一首〞用例說明參與者用例說明用戶用例名稱:切換第一/最后一首音樂目標(biāo):使得用戶可以切換到第一/最后一首音樂前置條件:音樂/視頻正在播放或暫停根本領(lǐng)件流:①用戶單擊“第一首/最后一首〞按鈕②播放第一/最后一首音樂表3.5“查看媒體列表〞用例說明參與者用例說明用戶用例名稱:查看媒體列表目標(biāo):使得用戶可以查看音樂/視頻列表前置條件:播放器正在運行根本領(lǐng)件流:①用戶單擊“聽音樂〞或“視頻列表〞圖片按鈕②用戶獲得音樂/視頻列表表3.6“控制音量〞用例說明參與者用例說明用戶用例名稱:控制音量目標(biāo):使得用戶可以調(diào)節(jié)音量大小前置條件:播放器正在運行根本領(lǐng)件流:①用戶調(diào)節(jié)音量控制條②用戶取得音量大小3.1.2媒體文件列表的獲取當(dāng)用戶啟動播放器時,從SD卡獲取多媒體文件信息,并以列表的形式顯示在屏幕上,供用戶選擇播放,文件格式有mp3,wma,mp4,3gp等。我們以音樂播放器局部為例,當(dāng)我們從SD卡里面獲取關(guān)于mp3/wma詳細(xì)信息,包括TITLE〔標(biāo)題〕、ARTIST〔藝術(shù)家〕、ALBUM〔專輯〕、SIZE〔大小〕、DURATION〔持續(xù)時間〕、DATA〔數(shù)據(jù)〕、DISPLAY_NAME〔顯示名稱〕等字段,我們可以通過不同的字段來排列,用戶可以獲得不同的歌曲列表,讓用戶有更多的選擇方式。3.1.3數(shù)據(jù)源分析播放器應(yīng)用程序自行調(diào)用Android庫函數(shù),SDCard里所有媒體信息都存儲在這個類里,從而可以輕松獲取SD里面的多媒體文件的詳細(xì)信息,當(dāng)然前提是SDCard存在。MediaStore這個類是android系統(tǒng)提供的一個多媒體數(shù)據(jù)庫,android中多媒體信息都可以從這里提取。這個MediaStore包括了多媒體數(shù)據(jù)庫的所有信息,包括音頻,視頻和圖像,android把所有的多媒體數(shù)據(jù)庫接口進(jìn)行了封裝,所有的數(shù)據(jù)庫不用自己進(jìn)行創(chuàng)立,直接調(diào)用利用ContentResolver去掉用那些封裝好的接口就可以進(jìn)行數(shù)據(jù)庫的操作了。3.2系統(tǒng)界面需求播放器界面要求布局合理,顏色舒適,控制按鈕友好,所以我們采用系統(tǒng)自帶播放控制按鈕和自定義播放模式按鈕、音軌、進(jìn)度條相結(jié)合,合理利用資源,如下列圖為音頻和視頻播放器界面例如:圖3.3音頻播放器界面圖3.4視頻播放器界面3.4系統(tǒng)性能需求根據(jù)Android系統(tǒng)要求無響應(yīng)時間為5秒,所以就有如下性能要求:當(dāng)點擊播放時,程序響應(yīng)時間最長不能超過5秒當(dāng)點擊暫停時,程序響應(yīng)時間最長不能超過5秒當(dāng)點擊第一首/最后一首時,程序響應(yīng)時間最長不能超過5秒當(dāng)點擊上/下一首時,程序響應(yīng)時間最長不能超過5秒當(dāng)要求退出播放器時,程序響應(yīng)時間最長不能超過5秒3.5運行環(huán)境需求硬件環(huán)境:Android基于Linux操作系統(tǒng)操作系統(tǒng):Android—3.2版本開發(fā)環(huán)境:Eclipse3.6+ADT+JDK-7u1+SDK_r174系統(tǒng)設(shè)計4.1系統(tǒng)功能實現(xiàn)過程〔時序圖〕和系統(tǒng)流程圖我們根據(jù)播放器具體的功能實現(xiàn)過程畫出了功能實現(xiàn)時序圖和系統(tǒng)流程圖,可以清晰明了地展示整個播放器運行時的操作流程。系統(tǒng)功能時序圖〔圖4.1〕主要描述了系統(tǒng)在運行過程中各個功能類之間的調(diào)用情況,當(dāng)用戶的操作滿足觸發(fā)條件時,系統(tǒng)將調(diào)用相應(yīng)的方法實現(xiàn)用戶的需求。圖中的“媒體文件列表列表〞、“播放界面〞和“功能設(shè)置〞是音頻播放器和視頻播放器相結(jié)合的產(chǎn)物,為了整個系統(tǒng)的統(tǒng)一性,這里沒有一分為二,而是將整個多媒體播放器的時序圖描繪出來。系統(tǒng)流程圖〔圖4.2〕主要介紹整個軟件功能實現(xiàn)的過程,從用戶啟動軟件到使用軟件,再到退出,這個過程通過流程圖來描繪,清晰明了。整個系統(tǒng)的實現(xiàn)充分表達(dá)出的用戶交互友好性。系統(tǒng)功能時序圖圖4.1系統(tǒng)功能時序圖4.1.2多媒體播放器的系統(tǒng)流程圖圖4.2系統(tǒng)流程圖4.2系統(tǒng)功能表和系統(tǒng)功能結(jié)構(gòu)圖我們對整個播放器工程進(jìn)行了一個比擬系統(tǒng)的分析,下面通過系統(tǒng)功能表和功能結(jié)構(gòu)圖來理清整個播放器的功能實現(xiàn)。如圖2.5和表2.9:圖4.3系統(tǒng)功能結(jié)構(gòu)圖表4.1系統(tǒng)功能表功能類別子功能子功能主界面音樂播放器進(jìn)入音樂播放器界面視頻播放器進(jìn)入視頻播放器界面音樂播放界面播放播放歌曲->線程啟動->時間更新暫停暫停歌曲->線程暫停->時間暫停停止停止歌曲->線程停止->時間停止上一首播放列表索引變化->尋找上一ID歌曲下一首播放列表索引變化->尋找下一ID歌曲續(xù)表4.1功能類別子功能子功能音樂播放界面音樂播放界面菜單跳轉(zhuǎn)至視頻播放器界面跳轉(zhuǎn)至音樂庫界面跳轉(zhuǎn)至視頻庫界面跳轉(zhuǎn)至播放器關(guān)于界面退出程序音量調(diào)節(jié)調(diào)節(jié)音樂播放器播放音量視頻播放界面播放播放視頻->線程啟動->時間更新暫停暫停視頻->線程暫停->時間暫停停止停止視頻->線程停止->時間停止上一部視頻列表索引變化->尋找上一ID視頻下一部視頻列表索引變化->尋找下一ID視頻音量控制調(diào)節(jié)視頻播放器播放音量視頻播放界面菜單跳轉(zhuǎn)至音樂播放器界面跳轉(zhuǎn)至音樂庫界面跳轉(zhuǎn)至視頻庫界面跳轉(zhuǎn)至播放器關(guān)于界面退出程序5系統(tǒng)功能實現(xiàn)5.1播放器主界面功能實現(xiàn)5.1.1音頻播放器主界面的實現(xiàn)音頻主界面主要是通過一個XML布局文件實現(xiàn)的,我們把它命名為music.xml,這里采用相對布局和線性布局相結(jié)合的方法。我們還要自行定義一個LrcView,在音頻播放器播放歌曲時同步顯示歌詞。5.1.2視頻播放器主界面視頻播放器界面的實現(xiàn)跟音頻播放器比擬相似,我們把它命名為video.xml,都是在RelativeLayout〔相對布局〕中嵌套LinearLayout〔相對布局〕,在布局文件中定義一個SurfaceView,用作顯示視頻播放畫面。圖5.1音樂播放器主界面5.1.3播放器一般功能的實現(xiàn)圖5.2功能按鍵截圖如下圖,音頻播放器主要實現(xiàn)的一般播放控制功能有:播放、暫停、上一首、下一首、第一首、最后一首。android的媒體播放原理:android源程序已經(jīng)為我們封裝好了一個接口類,叫MediaPlayer。該接口在執(zhí)行行需要一個數(shù)據(jù)源,通過如下四個步驟:第一步:MediaPlayer.reset();復(fù)位操作,為以后的媒體準(zhǔn)備播放作準(zhǔn)備。第二步:傳入歌曲數(shù)據(jù)源,這里也是一個數(shù)據(jù)流MediaPlayer.setDataSource();參數(shù)需要傳一個路徑,該接口類在收到路徑后將其轉(zhuǎn)化為數(shù)據(jù)源。第三步:準(zhǔn)備播放數(shù)據(jù)源,調(diào)用方法MediaPlayer.Prepare();第四步:MediaPlayer.Start();播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再與程序有關(guān),需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start();讓其啟動;歌曲數(shù)據(jù)源的獲得:我們首先從SD卡中獲取我們所需要的多媒體文件信息,并以列表的方式顯示出來,如圖4.7所示。然后我們根據(jù)音頻文件的_ID信息獲取當(dāng)且播放的位置。我們建了一個適配器包,用來存放不同的功能列表功能。利用MusicService和MusicActivity控制音頻的播放。詳細(xì)代碼見附錄2“音頻播放器效勞器端代碼MusicService.java〞和“MusicActivity.java代碼〞。5.2獲取媒體文件列表MediaStore這個類是android系統(tǒng)提供的一個多媒體數(shù)據(jù)庫,android中多媒體信息都可以從這里提取。這個MediaStore包括了多媒體數(shù)據(jù)庫的所有信息,包括音頻,視頻和圖像,android把所有的多媒體數(shù)據(jù)庫接口進(jìn)行了封裝,所有的數(shù)據(jù)庫不用自己進(jìn)行創(chuàng)立,直接調(diào)用利用ContentResolver去調(diào)用那些封裝好的接口就可以進(jìn)行數(shù)據(jù)庫的操作了。圖5.3以歌名為首選項的音樂文件列表界面首先,要得到一個ContentResolver實例,ContentResolver可以這樣獲取,利用一個Activity或者Service的Context即可。如下所示:ContentResolvermResolver=ctx.getContentResolver();上面的那個ctx的就是一個context,Activity.this就是那個Context,這個Context就相當(dāng)于一個上下文環(huán)境。得到這個Context后就可以調(diào)用getContentResolver接口獲取ContentResolver實例了。ContentResolver實例獲得后,就可以進(jìn)行各種查詢,下面我就以音頻數(shù)據(jù)庫為例講解增刪改查的方法,視頻和圖像和音頻非常類似。在講解各種查詢之前,我給大家介紹下怎么看android都提供了哪些多媒體表。在adbshell中,找到下,然后找到SD卡的數(shù)據(jù)庫文件(一般是一個.db文件),然后輸入命令sqlite3加上這個數(shù)據(jù)庫的名字就可以查詢android的多媒體數(shù)據(jù)庫了。.table命令可以列出所有多媒體數(shù)據(jù)庫的表,.scheme加上表名可以查詢表中的所有列名。這里可以利用SQL語句來查看你想要的數(shù)據(jù),記得最后一定要記住每條語句后面都加上分號。那么怎么在這些表上進(jìn)行增刪改查。查詢代碼如下所示:Cursorcursor=resolver.query(_uri,prjs,selections,selectArgs,order);ContentResolver的query方法接受幾個參數(shù),參數(shù)意義如下:Uri:這個Uri代表要查詢的數(shù)據(jù)庫名稱加上表的名稱。這個Uri一般都直接從MediaStore里取得,例如我要取所有歌的信息,就必須利用MediaStore.Audio.Media.EXTERNAL_CONTENT_URI這個Uri。專輯信息要利用MediaStore.Au這個Uri來查詢,其他查詢也都類似。Prjs:這個參數(shù)代表要從表中選擇的列,用一個String數(shù)組來表示。Selections:相當(dāng)于SQL語句中的where子句,就是代表你的查詢條件。selectArgs:這個參數(shù)是說你的Selections里有?這個符號是,這里可以以實際值代替這個問號。如果Selections這個沒有?的話,那么這個String數(shù)組可以為null。Order:說明查詢結(jié)果按什么來排序。上面就是各個參數(shù)的意義,它返回的查詢結(jié)果一個Cursor,這個Cursor就相當(dāng)于數(shù)據(jù)庫查詢的中Result,用法和它差不多。下面的代碼是獲取SD卡里所有的音頻文件信息并返回列表:publicstaticList<Music>getMusicData(Contextcontext){ List<Music>musicList=newArrayList<Music>(); ContentResolvercr=context.getContentResolver(); if(cr!=null){ //獲取所有歌曲 Cursorcursor=cr.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER); if(null==cursor){ returnnull; } if(cursor.moveToFirst()){ do{ Musicm=newMusic(); Stringtitle=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.TITLE)); Stringsinger=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ARTIST)); if("<unknown>".equals(singer)){ singer="未知藝術(shù)家"; } Stringalbum=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM)); longsize=cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.SIZE)); longtime=cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.DURATION)); Stringurl=cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DATA)); Stringname=cursor .getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); Stringsbr=name.substring(name.length()-3, name.length()); //Log.e("",sbr); if(sbr.equals("mp3")){ m.setTitle(title); m.setSinger(singer); m.setAlbum(album); m.setSize(size); m.setTime(time); m.setUrl(url); m.setName(name); musicList.add(m); } elseif(sbr.equals("wma")){ m.setTitle(title); m.setSinger(singer); m.setAlbum(album); m.setSize(size); m.setTime(time); m.setUrl(url); m.setName(name); musicList.add(m); } }while(cursor.moveToNext()); } } returnmusicList; }5.3菜單功能菜單主要提供關(guān)于、退出、檢查更新還有音頻播放器和視頻播放器界面切換功能。主要應(yīng)用OnCreate〔〕函數(shù)和intent播送事件以及事件監(jiān)聽器完成這局部的功能。在線更新功能需要解析url地址。圖5.4Menu菜單功能項5.4音樂播放器其他功能5.4.1歌詞同步顯示歌詞同步顯示是利用判斷歌曲播放進(jìn)度,根據(jù)時間節(jié)點同步更新歌詞片段。用Notepad++翻開Lrc歌詞文件,是如下定義的:[00:01.12]洪卓立-彌足珍貴[00:03.78][00:04.75]作曲:Pan[00:05.65]填詞:周耀輝[00:08.05]監(jiān)制:廖志華[00:09.83][00:11.21]LRC制作:活在?下QQ:6313827[00:16.45][00:24.48]孩子走過一轉(zhuǎn)眼發(fā)現(xiàn)會漸老[00:30.46]時光淌過街巷見證著故事老[00:36.55]而我開始很急躁[00:42.69]難道快樂過後再得不到[00:47.43][00:48.79]泥車駛過不經(jīng)意拆去了舊鋪可見每個時間點對應(yīng)一句歌詞,只要我們找到準(zhǔn)確的時間節(jié)點,把歌詞文件解析后即可顯示在LrcView上面。這里我們調(diào)用FileInputStream〔〕和InputStreamReader〔〕來讀取歌詞文件;調(diào)用BufferedReader的readline方法讀取每一行歌詞。將[]歌詞時間標(biāo)記替換成空字符和@字符,然后別離@字符,處理歌詞取得歌詞時間節(jié)點,將時間串添加進(jìn)列表數(shù)組;如果不存在歌詞文件,捕捉異常catch(FileNotFoundExceptione)并輸出相應(yīng)提示信息。接下來我們需要解析已獲得的時間字符列表數(shù)組,將:和.用@字符代替,別離出分、秒并轉(zhuǎn)化為整型;計算上一行與下一行的時間轉(zhuǎn)換為毫秒數(shù),之后將歌詞和時間都返回。詳細(xì)代碼見附錄B-3。圖5.5歌詞同步顯示在播放器顯示時,還需要將時間格式進(jìn)行轉(zhuǎn)換,以**:**的形式顯示在歌詞面板上。publicStringtoTime(inttime){ time/=1000; intminute=time/60; inthour=minute/60; intsecond=time%60; minute%=60; returnString.format("%02d:%02d",minute,second); }5.4.2播放模式切換播放模式的切換通過監(jiān)聽用戶點擊切換圖片按鈕實現(xiàn),而且不能同時啟動兩種播放模式,音樂播放器啟動默認(rèn)為順序播放模式。當(dāng)用戶切換到“單曲循環(huán)〞模式時,一直重復(fù)播放當(dāng)前ID的歌曲;當(dāng)切換到“隨機播放〞模式時,自動生成同當(dāng)前播放ID不一樣的一個隨機ID,并且此ID不大于列表中最大的ID數(shù),Play_next〔〕指向這個隨機ID,實現(xiàn)隨機播放功能。圖5.6音量控制和播放模式切換按鈕在音樂播放器中我們創(chuàng)立一個監(jiān)聽類OnClickListener用來監(jiān)聽用戶單擊圖片按鈕事件,當(dāng)用戶單擊播放模式切換按鈕時在切換模式的同時改變圖片按鈕,方便用戶看到當(dāng)前的播放模式。詳細(xì)代碼見附錄2。5.4.3甩歌功能當(dāng)用戶甩動時可以自行切換歌曲,這局部功能代碼如下://重力感應(yīng)甩歌代碼 privatestaticfinalintSHAKE_THRESHOLD=3000; privatelonglastUpdate=0; privatedoublelast_x=0; privatedoublelast_y=4.50; privatedoublelast_z=9.50; //這個控制精度,越小表示反響越靈敏 @Override publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){ //TODOAuto-generatedmethodstub //處理精準(zhǔn)度改變 } @Override publicvoidonSensorChanged(SensorEventevent){ //TODOAuto-generatedmethodstub if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ longcurTime=System.currentTimeMillis(); //每200毫秒檢測一次 if((curTime-lastUpdate)>100){ longdiffTime=(curTime-lastUpdate); lastUpdate=curTime; doublex=event.values[SensorManager.DATA_X]; doubley=event.values[SensorManager.DATA_Y]; doublez=event.values[SensorManager.DATA_Z]; Log.e("","x="+x+"y="+y+"z="+z); floatspeed=(float)(Math.abs(x+y+z-last_x-last_y-last_z)/diffTime*10000); if(speed>SHAKE_THRESHOLD){//檢測到搖晃后執(zhí)行的代碼 if(MusicService.playing==true){ Intentintent=newIntent(MusicActivity.this, MusicService.class); intent.putExtra("play","pause"); startService(intent); isPlaying=false; imageBtnPlay.setImageResource(R.drawable.play1); replaying=false; }else{ Intentintent=newIntent(MusicActivity.this, MusicService.class); intent.putExtra("play","playing"); intent.putExtra("id",id); startService(intent); isPlaying=true; imageBtnPlay.setImageResource(R.drawable.pause1); replaying=true; } } last_x=x; last_y=y; last_z=z; }} } publicImageViewgetIcon(){ returnicon; } publicvoidsetIcon(ImageViewicon){ this.icon=icon; }這里我們調(diào)用傳感器類來感應(yīng)用戶搖動的頻率,當(dāng)檢測到搖晃后,執(zhí)行切歌任務(wù)。5.5視頻播放器其他功能5.5.1視頻顯示比例的切換當(dāng)用戶雙擊屏幕時,可以切換全屏,給予用戶更好的視覺體驗。調(diào)用OnClickListener()方法監(jiān)聽用戶雙擊屏幕的活動,喚醒全屏Activity。6系統(tǒng)測試這里我主要為我的伙伴做單元測試,完善相關(guān)編碼,包括各個界面的切換、播放控制功能和相關(guān)功能的在模擬機和真機上的測試。整個測試過程業(yè)已完畢。6.1單元測試一主要在模擬器上測試播放器各個功能的實現(xiàn)情況,包括界面切換、多媒體文件列表的獲取情況、播放控制功能和相關(guān)功能的實現(xiàn)。及時優(yōu)化相關(guān)代碼,并進(jìn)一步美化各個界面。以音樂播放器的歌詞同步處理類代碼為例,需要判斷歌詞的進(jìn)度同歌曲進(jìn)度一致,歌詞的總時間長度被分割成幾十個不同的節(jié)點,當(dāng)歌曲播放到一個時間點,跟歌詞處于同一個臨界點時,返回歌詞檢索值,并響應(yīng)同步顯示歌詞。 //創(chuàng)立對象 privateList<LrcContent>lrcList=newArrayList<LrcContent>(); //初始化歌詞檢索值 privateintindex=0; //初始化歌曲播放時間的變量 privateintCurrentTime=0; //初始化歌曲總時間的變量 privateintCountTime=0;/***歌詞同步處理類**/ publicintLrcIndex(){ if(player.isPlaying()){ //獲得歌曲播放在哪的時間 CurrentTime=player.getCurrentPosition(); //獲得歌曲總時間長度 CountTime=player.getDuration(); } if(CurrentTime<CountTime){ for(inti=0;i<lrcList.size();i++){ if(i<lrcList.size()-1){ if(CurrentTime<lrcList.get(i).getLrc_time()&&i==0){ index=i; } if(CurrentTime>lrcList.get(i).getLrc_time() &&CurrentTime<lrcList.get(i+1).getLrc_time()){ index=i; } } if(i==lrcList.size()-1 &&CurrentTime>lrcList.get(i).getLrc_time()){ index=i; } } } returnindex; }6.2單元測試二往模擬器的SD卡里上傳不同文件類型的媒體文件,測試播放器的功能能否順利實現(xiàn),發(fā)現(xiàn)順序播放時,播放到最后一首的時候播放器異常關(guān)閉了,為此我們準(zhǔn)備進(jìn)行一些改進(jìn),創(chuàng)立一個監(jiān)聽類,當(dāng)歌曲播放到最大的_ID位置時,當(dāng)播放完畢前一秒時拋出異常,自行停止播放線程。將生成的APK文件拷貝到真機上安裝,運行并測試甩歌、監(jiān)聽等功能。進(jìn)一步優(yōu)化播放模式切

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論