版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于Android的視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 中 文 摘 要</p><p> 如今,隨著基于Android操作系統(tǒng)的智能手機(jī)的廣泛應(yīng)用,視頻播放器已成為智能手機(jī)的一個(gè)必不可少的程序,廣大用戶迫切需要一個(gè)貼近用戶、方便用戶、個(gè)性化的視頻播放器。因此,設(shè)計(jì)一個(gè)基于android手機(jī)的多功能播放器,具有重要的實(shí)際意義。</p>&l
2、t;p> 本次畢業(yè)設(shè)計(jì)主要使用JDK + Eclipse + Android-SDK-Windows工具進(jìn)行開發(fā),使用的編程語言是Java語言。該程序主要由4個(gè)不同Activity來實(shí)現(xiàn),每個(gè)Activity實(shí)現(xiàn)相應(yīng)的功能模塊,能夠有效滿足Android手機(jī)用戶在視頻播放中的常見需求。</p><p> 本論文詳細(xì)介紹了播放器程序的設(shè)計(jì)思路、設(shè)計(jì)方案、系統(tǒng)結(jié)構(gòu)和項(xiàng)目工程結(jié)構(gòu),對(duì)系統(tǒng)的可行性與需求性進(jìn)行了
3、詳細(xì)的分析,闡述了系統(tǒng)各個(gè)模塊功能的設(shè)計(jì)與實(shí)現(xiàn)。對(duì)程序主要的Activity都進(jìn)行了詳細(xì)的介紹和分析,包括對(duì)其使用的布局文件的具體介紹,以及各個(gè)控件的作用。在最后進(jìn)行了程序測(cè)試,對(duì)每一個(gè)實(shí)現(xiàn)的模塊功能都做了測(cè)試,并且記錄了大量截圖用來展示測(cè)試結(jié)果,以觀察程序應(yīng)有的功能是否正常運(yùn)行,以及發(fā)現(xiàn)程序中可能存在的問題。所開發(fā)的程序界面比較友好,操作相對(duì)容易,達(dá)到設(shè)計(jì)要求。</p><p> 關(guān)鍵詞:安卓;視頻播放;Ac
4、tivity;Mediaplayer</p><p> The Design and Implementation of Video Player Based on Android</p><p><b> ABSTRACT</b></p><p> Now, with the wide application of smart phon
5、e based on the Android operating system, video player has become the essential application of smart phone. Most of consumers urgently require a personalized video player which is close to user and facilitate user. Theref
6、ore, the design of a multifunctional player based on android mobile phones has an important practical significance.</p><p> The project design is developed by using JDK, Eclipse, and Android-SDK-Windows too
7、ls. The programming language is Java. The program consists of four different Activities and each Activity achieves the corresponding functional modules which can effectively satisfy the common requirements for playing vi
8、deo on Android mobile phones.</p><p> This paper introduced the design ideas, design scheme, system architecture and project engineering structures of video player. The feasibility and requirements of syste
9、m were analyzed in detail. The system function and each module were explained. The main Activity of the program are described and analyzed in detail including the using layout file, as well as the role of each control. F
10、inally, I made the test for the program including the functions of each implemented modules. In order to observe</p><p> KEY WORDS: Android; Video Play; Activity; Mediaplayer</p><p><b>
11、目 錄</b></p><p><b> 中文摘要I</b></p><p> ABSTRACTII</p><p> 目 錄III</p><p><b> 第一章 緒論1</b></p><p> 1.1課題的來源及意義1&l
12、t;/p><p> 1.2 Android發(fā)展現(xiàn)狀及前景1</p><p> 1.3項(xiàng)目的主要工作和解決的問題2</p><p> 1.4系統(tǒng)設(shè)計(jì)的目標(biāo)及基本思路3</p><p> 1.5論文組織結(jié)構(gòu)3</p><p> 第二章 Android視頻播放器相關(guān)技術(shù)介紹4</p><p
13、> 2.1 Android介紹4</p><p> 2.2 Android開發(fā)平臺(tái)及相關(guān)技術(shù)5</p><p> 2.2.1 Android-Windows開發(fā)環(huán)境5</p><p> 2.2.2 Mediaplayer視頻技術(shù)6</p><p> 2.2.3 Surface、SurfaceView、SurfaceHo
14、lder三者之間的關(guān)系9</p><p> 第三章 系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)11</p><p> 3.1系統(tǒng)分析11</p><p> 3.1.1系統(tǒng)可行性分析11</p><p> 3.1.2 系統(tǒng)需求分析11</p><p> 3.2系統(tǒng)結(jié)構(gòu)設(shè)計(jì)12</p><p&g
15、t;<b> 第四章 測(cè)試16</b></p><p> 4.1測(cè)試環(huán)境和條件16</p><p><b> 4.2測(cè)試16</b></p><p> 4.3測(cè)試結(jié)果分析24</p><p><b> 結(jié) 論25</b></p><
16、p><b> 參考文獻(xiàn)26</b></p><p><b> 附 錄28</b></p><p><b> 第一章 緒論</b></p><p> 1.1課題的來源及意義</p><p> 在這個(gè)信息化的時(shí)代, IT業(yè)已經(jīng)成為世界發(fā)展的主流,我們對(duì)信
17、息技術(shù)的依賴遠(yuǎn)遠(yuǎn)超過了對(duì)我們自己的依賴,計(jì)算機(jī)和手機(jī)已經(jīng)成為我們?nèi)粘I钪胁豢扇鄙俚墨@得信息的渠道。正因?yàn)槿绱?,各種各樣的軟件層出不窮,我們的生活也因?yàn)楦鞣N各樣的軟件變的更有滋有味。不缺乏娛樂性,也不缺乏教育意義,讓我們從這些軟件中受益匪淺,使我們看到了相比以前的巨大進(jìn)步。同時(shí),隨著科技的發(fā)展,計(jì)算機(jī)越來越精致,手機(jī)也越來越智能化,所以我們的依賴性也越來越大,越來越離不開這些給我們提供日常信息的工具。手機(jī)也已不再僅僅是簡(jiǎn)單的人與人通話的
18、工具,而是在很大程度上成為了我們獲取信息的一個(gè)更好的渠道。一個(gè)好的軟件,能夠標(biāo)志一個(gè)手機(jī)品牌的地位。所以,開發(fā)一款好的手機(jī)軟件是相當(dāng)必要的。以前我們看電影,看視頻,都要去電影院或者是影吧,而且時(shí)間有限,很不方便;而現(xiàn)在是在電腦上或者手機(jī)上看視頻,看小說,文檔等等。以此看來,一個(gè)好的手機(jī)視頻播放器軟件的開發(fā)是相當(dāng)有必要的。</p><p> 作為集通訊與娛樂消費(fèi)為一體的智能手機(jī),播放器是其中一個(gè)必不可少的重要功能
19、,一個(gè)貼近用戶,方便用戶的多功能的播放器也是用戶所渴望的,更是開發(fā)人員應(yīng)當(dāng)致力于的。隨著Google推出的Android手機(jī)的不斷更新?lián)Q代,技術(shù)方面也日趨成熟,一個(gè)良好的視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)已經(jīng)成為可能。</p><p> 目前,作為Android的手機(jī)用戶而言,都有視頻播放器的實(shí)體應(yīng)用。但是,對(duì)于絕大多少而言,其界面單調(diào),功能單一。比如,界面與其他非智能的手機(jī)沒有大的區(qū)別,而功能上面,也就除了基本的播放控制
20、流程之外,多上一個(gè)視頻基本信息的顯示,同時(shí)加上一個(gè)對(duì)預(yù)設(shè)定路徑的播放列表的展示。因此,開發(fā)一款界面友好、炫麗、功能更多的視頻播放器,更好的貼近用戶,滿足用戶需求,其應(yīng)用前景也是相當(dāng)樂觀的。</p><p> 1.2 Android發(fā)展現(xiàn)狀及前景</p><p> Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由Google公司
21、和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機(jī)。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發(fā)商及電信營(yíng)運(yùn)商組建開放手機(jī)聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第一部Android智能手機(jī)發(fā)布于2008年10月。Android逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、
22、數(shù)碼相機(jī)、游戲機(jī)等。2011年第一季度,Android在全球的市場(chǎng)份額首次超過塞班系統(tǒng),躍居全球第一。 2012年11月數(shù)據(jù)顯示,Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng)76%的份額,中國(guó)市場(chǎng)占有率為90%。由此可見,Android占有非??捎^的市場(chǎng)前景。</p><p> 具有開源特性的Android平臺(tái)打破了之前Symbian、Windows mobile等操作系統(tǒng)收取高額授權(quán)費(fèi)用的模式,使得智能手機(jī)成本
23、大大的降低。而正是由于它開放源代碼,使得手機(jī)產(chǎn)生更多個(gè)性化的應(yīng)用。同時(shí),合作方能夠在這里得到利潤(rùn)或者創(chuàng)造價(jià)值,手機(jī)軟件行業(yè)得到維護(hù)協(xié)調(diào)發(fā)展。以Google、蘋果和諾基亞為中心各自形成的生態(tài)鏈將以原來數(shù)倍的速度推動(dòng)移動(dòng)互聯(lián)網(wǎng)的發(fā)展,這正是Google發(fā)布Android平臺(tái)的意義,也是Android平臺(tái)存在的使命所在。作為Android平臺(tái)成員之一的中國(guó)移動(dòng)也投資成立了一家通訊公司,專門從事G oogle手機(jī)軟件的應(yīng)用以及本地化的軟件的開發(fā)
24、,比如將在Google手機(jī)平臺(tái)上添加飛信、 輸入法等一系列符合國(guó)內(nèi)用戶使用特色的功能。國(guó)內(nèi)眾多企業(yè)也將眼光投入到Android上面,并啟動(dòng)了相關(guān)的計(jì)劃來深入的理解并發(fā)展Android。更多的手機(jī)軟件開發(fā)企業(yè)已經(jīng)或者籌備著將公司進(jìn)行轉(zhuǎn)型,從其他方向的開發(fā)轉(zhuǎn)向到Android的開發(fā)。由此可見,無論是在國(guó)內(nèi)還是在國(guó)外,Android平臺(tái)對(duì)手機(jī)軟件行業(yè)和移動(dòng)手機(jī)平臺(tái) 將發(fā)揮極大地推動(dòng)作用,而在未來的幾年時(shí)間里,Android將越</p&g
25、t;<p> 目前國(guó)內(nèi)的Android開發(fā)還是主要以應(yīng)用開發(fā)為主,主要分成3類:為企業(yè)開發(fā)應(yīng)用、開發(fā)通用應(yīng)用(放到Android Market或者其他App Market銷售)以及游戲開發(fā)(放到Android Market或者其他App Market銷售)。第一類開發(fā)者一般身處規(guī)模較大的公司,這些公司主要為自有品牌或者其他品牌設(shè)計(jì)手機(jī)或者平板電腦的總體方案。除了根據(jù)需求對(duì)系統(tǒng)進(jìn)行定制外,更多的工作在于為這些系統(tǒng)編寫定制的
26、應(yīng)用。第二類開發(fā)者,一般處于創(chuàng)業(yè)型公司或者是獨(dú)立開發(fā)者,他們的盈利方式主要是2種:為國(guó)外公司進(jìn)行外包開發(fā),或者通過Google的移動(dòng)廣告(AdMob)通過廣告點(diǎn)擊分成。而理論上的通過付費(fèi)下載的形式來盈利的,現(xiàn)在國(guó)內(nèi)鮮見成功者。第三類開發(fā)者,目前和第二類開發(fā)者類似[3]。</p><p> 1.3項(xiàng)目的主要工作和解決的問題</p><p> 本課題的研究目的就是要通過對(duì)基于Android
27、的多功能視頻播放的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),探討該系統(tǒng)的實(shí)現(xiàn)過程,以有效滿足Android手機(jī)用戶在視頻播放中常見的需求。本課題的主要內(nèi)容為:</p><p> (1)根據(jù)對(duì)Android手機(jī)視頻播放器功能的了解和分析,從功能和實(shí)用的角度出發(fā),設(shè)計(jì)并實(shí)現(xiàn)Android視頻播放器;</p><p> (2)對(duì)Android視頻播放器進(jìn)行模塊劃分;</p><p> (3)
28、對(duì)各模塊分析并設(shè)計(jì)、實(shí)現(xiàn);</p><p> (4)從功能多樣性角度考慮,盡可能添加一些附加的設(shè)計(jì)方案并實(shí)現(xiàn)。</p><p> 1.4系統(tǒng)設(shè)計(jì)的目標(biāo)及基本思路</p><p> 本次畢業(yè)設(shè)計(jì)使用Eclipse + ADT插件 + DDMS插件搭建的Android開發(fā)平臺(tái)環(huán)境,開發(fā)語言為Java語言。需要開發(fā)出基于Android平臺(tái)的視頻播放器應(yīng)用程序,并能夠
29、在Android手機(jī)上運(yùn)行。</p><p><b> 基本思路介紹如下:</b></p><p> 第一步:程序運(yùn)行時(shí)進(jìn)入主Activity,通過更新或查看文件列表,選擇一個(gè)視頻文件;</p><p> 第二步:讀入視頻文件,調(diào)用Mediaplayer.setDataSource()方法設(shè)置文件路徑,并通過Mediaplayer.pre
30、pare()方法將Mediaplayer對(duì)象置為準(zhǔn)備狀態(tài);</p><p> 第三步:調(diào)用Mediaplayer.start()方法播放視頻,此時(shí)可以調(diào)節(jié)音量、進(jìn)度,暫停播放,重置播放等等操作;</p><p> 第四步:播放完成后,Mediaplayer對(duì)象進(jìn)入了PlaybackCompleted狀態(tài),此時(shí)可以選擇其他視頻文件進(jìn)入下一個(gè)視頻的播放或者退出程序。</p>
31、<p><b> 1.5論文組織結(jié)構(gòu)</b></p><p> 本文主要由:中英文摘要、目錄、緒論、課題相關(guān)技術(shù)介紹、系統(tǒng)可行性分析、系統(tǒng)需求分析、程序?qū)崿F(xiàn)、測(cè)試、結(jié)束語、參考文獻(xiàn)、致謝語以及附錄構(gòu)成。</p><p> 第一章緒論主要分析和介紹背景、課題主要研究的問題以及系統(tǒng)設(shè)計(jì)的目標(biāo)及基本思路。</p><p> 第二章主
32、要介紹課題的相關(guān)技術(shù)。</p><p> 第三章是系統(tǒng)分析以及系統(tǒng)功能的設(shè)計(jì)與實(shí)現(xiàn),其中包括系統(tǒng)可行性分析和系統(tǒng)需求分析。</p><p> 第四章是程序測(cè)試和結(jié)果的分析與研究等。</p><p> 最后對(duì)全文進(jìn)行了總結(jié)和展望,附錄部分為主要功能的函數(shù)源代碼。</p><p> 第二章 Android視頻播放器相關(guān)技術(shù)介紹</p
33、><p> 2.1 Android介紹</p><p> Android是“機(jī)器人”的意思,是Google公司于2007年11月5日發(fā)布的一個(gè)機(jī)遇Linux平臺(tái)的開源手機(jī)操作系統(tǒng)。該系統(tǒng)由底向上一共分為了4層,如圖2-1。每一層對(duì)把底層實(shí)現(xiàn)封裝,并提供調(diào)用接口給上一層。 </p>
34、<p> 圖2-1 Android系統(tǒng)架構(gòu)</p><p> (1) Linux內(nèi)核(Linux Kernel)。Android運(yùn)行在Linux Kernel2.6之上,但是把Linux內(nèi)核GNU協(xié)議約束的部分做了取代。這樣,運(yùn)行在Android上的程序可以用于商業(yè)目的。Linux內(nèi)核是硬件和軟件層之間的抽象層。</p><p> (2) 中間件。中間件包括兩部分:核心
35、庫和運(yùn)行時(shí)環(huán)境(Libraries & Android Runtime)。核心庫包括,SurfaceManager,顯示系統(tǒng)管理庫,負(fù)責(zé)把2D或3D內(nèi)容 顯示到屏幕;MediaFramework,媒體庫,負(fù)責(zé)支持圖像,支持多種視頻和音頻的錄制和回放;SQLite,數(shù)據(jù)庫,一個(gè)功能十分強(qiáng)大的輕量級(jí)嵌入式關(guān)系數(shù)據(jù)庫;WebKit瀏覽器引擎等。運(yùn)行時(shí)環(huán)境主要包括一個(gè)Dalvik Virtual Machin,Dalvik虛擬機(jī),區(qū)別于
36、Java虛擬機(jī)的是,每一個(gè)Android應(yīng)用程序都在自己的進(jìn)程中運(yùn)行,都有一個(gè)屬于自己的Dalvik虛擬機(jī),這一點(diǎn)可以讓系統(tǒng)在運(yùn)行時(shí)可以達(dá)到優(yōu)化,程序間的影響大大降低。Dalvik虛擬機(jī)并非運(yùn)行Java字節(jié)碼,而是運(yùn)行自己的字節(jié)碼。</p><p> (3)應(yīng)用程序框架。豐富而又可擴(kuò)展性的視圖(View),可以用來構(gòu)建應(yīng)用程序,它包括列表(List),網(wǎng)格(Grids),文本框(Textboxs),按鈕(But
37、ton),可嵌入的Web瀏覽器等。內(nèi)容提供者(Content Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享他們各自的數(shù)據(jù)。資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(LayoutFiles)。通知管理器(Notification Manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示自己定義的提示信息。活動(dòng)管理器(Activity Manager
38、)用來管理應(yīng)用程序的生命周期,并提供常用的導(dǎo)航回退功能。</p><p> (4)應(yīng)用程序。Android系統(tǒng)會(huì)內(nèi)置一些應(yīng)用程序包,包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理器等等。Android應(yīng)用程序由強(qiáng)大的Java語言來編寫,也支持其他一些語言如C、Perl等。其中Java應(yīng)用最為廣泛,其他語言已經(jīng)就看不到了[4]。</p><p> 2.2 Andr
39、oid開發(fā)平臺(tái)及相關(guān)技術(shù)</p><p> 2.2.1 Android-Windows開發(fā)環(huán)境</p><p> (1) JDK1.6.0_16:JDK(Java Development Kit)是Sun Microsystems針對(duì)Java開發(fā)員的產(chǎn)品。自從Java推出以來,JDK已經(jīng)成為使用最廣泛的Java SDK。JDK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境、Java工具
40、和Java基礎(chǔ)類庫。SE(J2SE),standard edition,標(biāo)準(zhǔn)版,是我們通常用的一個(gè)版本,從JDK 5.0開始,改名為Java SE。EE(J2EE),enterprise edition,企業(yè)版,使用這種JDK開發(fā)J2EE應(yīng)用程序,從JDK 5.0開始,改名為Java EE。ME(J2ME),micro edition,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序,從JDK 5.0開始,改名為Java ME。沒有JD
41、K的話,無法編譯Java程序[10]。</p><p> (2) Eclipse-SDK-3.6.2-win32:Eclipse 是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(Java Development Kit,JDK)[10]。</p><
42、p> (3) Android-SDK:SDK(software development kit)稱為軟件開發(fā)工具包。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件的開發(fā)工具的集合。因此,Android SDK 指的是Android專屬的軟件開發(fā)工具包。</p><p> (4) ADT_16:Android Development Tools--安卓開發(fā)工具。目前Andr
43、oid開發(fā)所用的開發(fā)工具是Eclipse,在Eclipse編譯IDE環(huán)境中,安裝ADT,為Android開發(fā)提供開發(fā)工具的升級(jí)或者變更,簡(jiǎn)單理解為在Eclipse下開發(fā)工具的升級(jí)下載工具[2]。</p><p> (5) AVD:AVD的全稱為:Android Virtual Device,就是Android運(yùn)行的虛擬設(shè)備,他是Android的模擬器識(shí)別。建立的Android要運(yùn)行,必須創(chuàng)建AVD,每個(gè)AVD上
44、可以配置很多的運(yùn)行項(xiàng)目。創(chuàng)建AVD的方法有兩種。一是通過eclipse 開發(fā)環(huán)境,二是通過命令行創(chuàng)建[5]。</p><p> 2.2.2 Mediaplayer視頻技術(shù)</p><p> 在Android系統(tǒng)中,最簡(jiǎn)單、最常用的視頻技術(shù)是Mediaplayer接口 ,通過此接口可以播放指定的音頻和視頻文件,另外也可以通過VideoView來播放視頻,雖然VideoView比Media
45、player簡(jiǎn)單易用,但定制性不如Mediaplayer,要視情況選擇。Mediaplayer播放音頻比較簡(jiǎn)單,但是要播放視頻就需要SurfaceView。SurfaceView比普通的自定義View在繪圖上更有優(yōu)勢(shì),它支持完全的OpenGL ES庫。</p><p> Mediaplayer能被用來控制音頻/視頻文件或流媒體的回放,可以在VideoView里找到關(guān)于如何使用這個(gè)類中的方法的例子。使用Media
46、player時(shí)限音頻和視頻播放的基本步驟,首先生成Mediaplayer對(duì)象,根據(jù)播放文件從不同的地方使用不同的生成方式;得到Mediaplayer對(duì)象后,根據(jù)實(shí)際需要調(diào)用不同的方法,如start()、stop()、pause()、release()等。需要注意的是,在不需要播放的時(shí)候要及時(shí)釋放掉與Mediaplayer對(duì)象相連接的播放文件[7]。</p><p> 圖2-2顯示了一個(gè)Mediaplayer對(duì)象
47、被支持的播放控制操作驅(qū)動(dòng)的生命周期和狀態(tài)。橢圓標(biāo)識(shí)代表Mediaplayer對(duì)象可能主流的狀態(tài)。由一個(gè)箭頭開始的弧線代表同步的方法調(diào)用,而以雙箭頭開頭的弧線代表異步調(diào)用方法。通過圖2-2可以知道一個(gè)Mediaplayer對(duì)象有如下狀態(tài)。</p><p> 當(dāng)一個(gè)MediaPlayer對(duì)象被剛剛用new操作符創(chuàng)建或是調(diào)用了reset()方法后,它就處于Idle狀態(tài)。當(dāng)調(diào)用了release()方法后,它就處于End
48、狀態(tài)。這兩種狀態(tài)之間的時(shí)間是MediaPlayer對(duì)象的生命周期。</p><p> 在一個(gè)新構(gòu)建的MediaPlayer對(duì)象和一個(gè)調(diào)用了reset()方法的MediaPlayer對(duì)象之間有個(gè)微笑但十分重要的差別。在Idle狀態(tài)時(shí),調(diào)用getCurrentPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setAudioStreamType(in
49、t)、setLooping(boolean)、setVolume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()或者是prepareAsync()方法都是編程錯(cuò)誤。當(dāng)一個(gè)MediaPlayer對(duì)象處于剛被創(chuàng)建的時(shí)候,內(nèi)部的播放引擎和對(duì)象的狀態(tài)都沒有改變,在這個(gè)時(shí)候調(diào)用以上方法,框架將無法回調(diào)客戶端程序注冊(cè)的OnErrorListener.onError()方法;但若這個(gè)
50、MediaPlayer對(duì)象調(diào)用了reset()方法之后,再調(diào)用以上方法,內(nèi)部的播放引擎就會(huì)回調(diào)客戶端注冊(cè)的OnErrorListener.onError()方法,并將錯(cuò)誤的狀態(tài)傳入。</p><p> 圖2-2 Mediaplayer對(duì)象狀態(tài)</p><p> 所以,一旦一個(gè)MediaPlayer對(duì)象不再被使用,應(yīng)立即調(diào)用release()方法來釋放咋內(nèi)部的播放引擎中與這個(gè)MediaP
51、layer對(duì)象關(guān)聯(lián)的資源。資源可能包括如硬件加速組件的單態(tài)組件,若沒有調(diào)用release()方法可能會(huì)導(dǎo)致之后 dMediaPlayer對(duì)象實(shí)例無法使用這個(gè)單態(tài)硬件資源,從而運(yùn)行失敗。一旦MediaPlayer對(duì)象進(jìn)入了End狀態(tài),它不能再被使用,也沒有辦法遷移到其他狀態(tài)[8]。</p><p> 此外,使用new創(chuàng)建的MediaPlayer對(duì)象處于Idle狀態(tài),而那些通過重載的create()便利方法創(chuàng)建 的
52、MediaPlayer對(duì)象卻不是處于Idle狀態(tài)。事實(shí)上,如果成功調(diào)用了重載的create()方法,那么這些對(duì)象已經(jīng)是處于Prepare狀態(tài)了。</p><p> 在一般情況下,由于種種原因,一些播放控制操作可能會(huì)失敗,如不支持視頻格式,缺少隔行掃描,分辨率過高,流超時(shí)等等。因此,錯(cuò)誤報(bào)告和回復(fù)在這種情況下是非常重要的。有時(shí),由于編程的錯(cuò)誤,在處于無效狀態(tài)的情況下調(diào)用了一個(gè)播放控制操作可能發(fā)生。在所有可能的錯(cuò)誤
53、條件下,內(nèi)部的播放器引擎會(huì)自動(dòng)的調(diào)用一個(gè)由程序自身所提供的OnErrorListener.onError()方法。程序可以通過調(diào)用Mediaplayer.setOnErrorListener()方法來注冊(cè)O(shè)nErrorListener。如一旦發(fā)生錯(cuò)誤,MediaPlayer對(duì)象會(huì)進(jìn)入到Error狀態(tài)。為了重用一個(gè)處于Error狀態(tài)的MediaPlayer對(duì)象,可以調(diào)用reset()方法把這個(gè)對(duì)象恢復(fù)成Idle狀態(tài)。注冊(cè)一個(gè)OnError
54、Listener獲知內(nèi)部播放心情發(fā)生的錯(cuò)誤時(shí)良好的編程習(xí)慣。在不合法的狀態(tài)下調(diào)用一些方法,如prepare()、prepareAsync()和setDataSource()方法等會(huì)拋出IllegalStateException異常。</p><p> 調(diào)用setDataSource(FileDescription)方法、setDataSource(String)方法、或者是setDataSource(Uri)方
55、法、setDataSource(FileDescriptor,long,long)方法,便可以使MediaPlayer對(duì)象從Idle狀態(tài)遷移到Initialized狀態(tài)。若此時(shí)MediaPlayer對(duì)象處于其他狀態(tài)下,調(diào)用setDataSource()方法會(huì)拋出IllegalStateException異常。</p><p> 在開始播放前,MediaPlayer對(duì)象必須進(jìn)入Prepared狀態(tài)。在此有兩種方法
56、(同步和異步)可以實(shí)現(xiàn)。調(diào)用Prepare()方法(同步),此方法返回表示MediaPlayer對(duì)象已經(jīng)進(jìn)入Prepared狀態(tài)。調(diào)用prepareAsync()方法(異步),此方法返回表示MediaPlayer對(duì)象進(jìn)入Preparing狀態(tài)并返回,而內(nèi)部的播放引擎繼續(xù)未完成的準(zhǔn)備工作。</p><p> 在開始播放時(shí),必須調(diào)用start()方法。當(dāng)方法返回成功時(shí),MediaPlayer對(duì)象應(yīng)當(dāng)處于Starte
57、d狀態(tài)。isPlaying()方法可以被調(diào)用來測(cè)試某個(gè)MediaPlayer對(duì)象是否處于Started狀態(tài)。</p><p> 播放可以被暫停、停止,以及調(diào)整當(dāng)前的播放位置。Pause()方法可以是MediaPlayer對(duì)象進(jìn)入Paused狀態(tài)。注意Started狀態(tài)和Paused狀態(tài)的相互轉(zhuǎn)換在內(nèi)部播放引擎中是異步的。所以可能需要一點(diǎn)時(shí)間在isPlaying()方法中更新狀態(tài)。</p><
58、p> 調(diào)用stop()方法會(huì)停止播放,并且還會(huì)讓一個(gè)處于Started、Paused、Prepared狀態(tài)的MediaPlayer對(duì)象進(jìn)入Stopped狀態(tài)。對(duì)一個(gè)已經(jīng)處于Stopped狀態(tài)的MediaPlayer對(duì)象的stop()方法沒有影響。</p><p> 調(diào)用seekTo()方法可以調(diào)整播放的位置。seekTo(int)方法是異步執(zhí)行的,所以它可以馬上返回,但是實(shí)際的定位播放操作可能需要一段時(shí)
59、間才能完成,尤其是播放流形式的音頻/視頻。當(dāng)實(shí)際的定位操作完成之后,內(nèi)部播放引擎會(huì)調(diào)用程序提供的OnSeekComplete()回調(diào)方法。在此需要注意的是,seekTo(int)方法也可以在其他狀態(tài)下調(diào)用,比如Prepared、Paused和PlaybackCompleted狀態(tài)。此外,當(dāng)前的音頻/視頻播放位置,實(shí)際上可以調(diào)用getCurrentPosition()方法來得到,它可以幫助播發(fā)器的應(yīng)用程序不斷更新播放進(jìn)度。</p&g
60、t;<p> 當(dāng)播放到流的末尾時(shí)完成播放。如果調(diào)用setlooping(boolean)方法開啟了循環(huán)模式,那么這個(gè)MediaPlayer對(duì)象會(huì)重新進(jìn)入Started狀態(tài)。如果沒有開啟循環(huán)模式,那么內(nèi)部播放引擎會(huì)調(diào)用OnCompletion.onCompletion()回調(diào)方法。一旦調(diào)用了該方法,說明這個(gè)MediaPlayer對(duì)象進(jìn)入了PlaybackCompleted狀態(tài)。此時(shí)可以再調(diào)用start()方法來讓這個(gè)Med
61、iaPlayer對(duì)象進(jìn)入Started狀態(tài)[6]。</p><p> 2.2.3 Surface、SurfaceView、SurfaceHolder三者之間的關(guān)系</p><p> (1) Surface</p><p> Surface就是“表面”的意思。在SDK的文檔中,對(duì)Surface的描述是這樣的:“Handle onto a raw buffer t
62、hat is being managed by the screen compositor”,翻譯成中文就是“由屏幕顯示內(nèi)容合成器(screen compositor)所管理的原生緩沖器的句柄”,這句話包括下面兩個(gè)意思:通過Surface(因?yàn)镾urface是句柄)就可以獲得原生緩沖器以及其中的內(nèi)容。就像在C語言中,可以通過一個(gè)文件的句柄,就可以獲得文件的內(nèi)容一樣;原生緩沖器(rawbuffer)是用于保存當(dāng)前窗口的像素?cái)?shù)據(jù)的。引伸地,
63、可以認(rèn)為Android中的Surface就是一個(gè)用來畫圖形(graphics)或圖像(image)的地方。根據(jù)Java方面的常規(guī)知識(shí),我們知道通常畫圖是在一個(gè)Canvas對(duì)象上面進(jìn)行的,由此,可以推知一個(gè)Surface對(duì)象中應(yīng)該包含有一個(gè)Canvas對(duì)象,事實(shí)上的確如此,而且這一點(diǎn)可以很容易通過debug運(yùn)行程序的方式得到證明。Surface中有一個(gè)Canvas成員,專門用于畫圖的。所以,Surface中的Canvas</p>
64、;<p> (2) SurfaceView</p><p> SurfaceView,顧名思義就是Surface的View,通過SurfaceView就可以看到Surface的部分或者全部的內(nèi)容,下面用一個(gè)圖來形象地描述一下Surface和SurfaceView的關(guān)系:</p><p> 圖2-3 Surface與SurfaceView</p><p
65、> 也就是說,Surface是用通過SurfaceView才能展示其中的內(nèi)容。由此來說,SurfaceView中的View之確切的含義應(yīng)該是viewport即“視口”的意思,類似數(shù)據(jù)庫的設(shè)計(jì),假定一個(gè)數(shù)據(jù)表有20個(gè)字段,但我們常常只用到其中的5個(gè)字段,那么就可以在原數(shù)據(jù)表的基礎(chǔ)上,通過SQL語句CREATEVIEW來創(chuàng)建只包含那5個(gè)字段內(nèi)容的view。另一方面,SurfaceView是Android中View的子類。事實(shí)上,在A
66、ndroid中所有用于界面展示的類皆為View的子類,包括那些不可見的、各種各樣的Layout。所以說,SurfaceView中的View有兩個(gè)含義:視口(viewport)的意思和SurfaceView是View的派生類在Android中Surface是從Object派生而來,且實(shí)現(xiàn)了Parcelable接口??吹絇arcelable就讓人能很自然地想到數(shù)據(jù)容器,SurfaceView就是用來展示Surface中的數(shù)據(jù)的。在這個(gè)層面上
67、而言,Surface就是管理數(shù)據(jù)的地方,SurfaceView就是展示數(shù)據(jù)的地方[3]。</p><p> (3)SurfaceHolder</p><p> SurfaceHolder是一個(gè)接口,其作用就像一個(gè)關(guān)于Surface的監(jiān)聽器。提供訪問和控制SurfaceView背后的Surface 相關(guān)的方法 (providingaccess and control over this
68、SurfaceView's underlying surface),它通過三個(gè)回調(diào)方法,讓我們可以感知到Surface的創(chuàng)建、銷毀或者改變。在SurfaceView中有一個(gè)方法getHolder,可以很方便地獲得SurfaceView所對(duì)應(yīng)的Surface所對(duì)應(yīng)的SurfaceHolder。</p><p> 從設(shè)計(jì)模式的高度來看,Surface、SurfaceView和SurfaceHolder實(shí)質(zhì)上
69、就是廣為人知的MVC,即Model-View-Controller。Model就是模型的意思,或者說是數(shù)據(jù)模型,或者更簡(jiǎn)單地說就是數(shù)據(jù),也就是這里的Surface;View即視圖,代表用戶交互界面,也就是這里的SurfaceView;SurfaceHolder很明顯可以理解為MVC中的Controller(控制器)。這樣看起來三者之間的關(guān)系就清楚了很多[9]。</p><p> 第三章 系統(tǒng)分析及系統(tǒng)結(jié)構(gòu)設(shè)計(jì)與
70、實(shí)現(xiàn)</p><p><b> 3.1系統(tǒng)分析</b></p><p> 3.1.1系統(tǒng)可行性分析</p><p> 可行性研究是為了弄清楚系統(tǒng)開發(fā)的項(xiàng)目是不是可以實(shí)現(xiàn)和值得進(jìn)行研究的過程,實(shí)際上是一次大大簡(jiǎn)化系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的過程,所以,進(jìn)行可執(zhí)行性的分析是非常必要的,也是很重要的,經(jīng)過最初的設(shè)計(jì)目標(biāo)和進(jìn)行的實(shí)時(shí)調(diào)查得出以下四點(diǎn)的可行
71、性分析:</p><p> 技術(shù)可行性:Eclipse + Android ADT的技術(shù)已經(jīng)較為成熟,通過SUN公司(現(xiàn)被ORCEL公司收購)推出的跨平臺(tái)、動(dòng)態(tài)的JAVA語言進(jìn)行開發(fā)。</p><p> 運(yùn)行可行性:該系統(tǒng)需要Android虛擬機(jī)環(huán)境,Eclipse中安裝ADT,DDMS等Google Android相關(guān)插件。其運(yùn)行環(huán)境已經(jīng)相當(dāng)穩(wěn)定,它功能豐富,包括了完備的Androi
72、d程序的編碼、調(diào)試、測(cè)試和發(fā)布功能,其中支持所有Android應(yīng)用開發(fā)相關(guān)技術(shù),包括SQLite,Skia,3D制作,Android XML,能夠很好的發(fā)布Android的應(yīng)用程序APK包。</p><p> (3)法律可行性:因?yàn)槭亲灾鏖_發(fā)設(shè)計(jì),所以不會(huì)構(gòu)成侵權(quán),在法律上是可行的。</p><p> 通過以上的可行性分析,將采用Eclipse+Android ADT + DDMS技術(shù)
73、,運(yùn)用JAVA語言進(jìn)行系統(tǒng)的開發(fā)。</p><p> 3.1.2 系統(tǒng)需求分析</p><p> 根據(jù)分析需求,這個(gè)系統(tǒng)必須實(shí)現(xiàn)以下的功能:</p><p> 實(shí)現(xiàn)手機(jī)支持的視頻格式文件的播放功能。</p><p> 作為播放器,其核心就是能夠流暢的播放視頻文件。手機(jī)一般不會(huì)支持對(duì)解碼要求太高的格式,如rmvb。作為手機(jī)硬件能夠承載的
74、視頻流文件,都應(yīng)當(dāng)能夠流暢的播放。</p><p> 能夠在手機(jī)里面定位視頻文件。</p><p> 在本播放器設(shè)計(jì)中,一個(gè)亮點(diǎn)就是自定義一個(gè)文件列表,能夠訪問手機(jī)里面任何能夠進(jìn)入的文件。這樣,也就能夠不需要將視頻文件放在一個(gè)系統(tǒng)固定的位置,您可以自己新建一個(gè)存放視頻文件的文件夾,放在任何你想要放的地方。這樣,需要播放你的視頻文件的時(shí)候,直接定位再好不過。</p><
75、;p> 能夠智能搜索出所有android sdcard中的視頻文件。</p><p> 做視頻的智能搜索,也是能夠快速定位位于sdcard中的視頻文件的另一個(gè)快捷的方法。</p><p> 在智能搜索設(shè)計(jì)中,通過mediascanner進(jìn)行sdcard中的所有視頻文件的掃描,包括自動(dòng)搜索和手動(dòng)添加。同時(shí),將其顯示到界面。一般,當(dāng)手機(jī)中存放的視頻文件過多,但對(duì)于新添加的視頻文件位
76、置很清楚時(shí),選擇手都添加比較好。</p><p> 能夠?qū)σ曨l文件常規(guī)信息信息進(jìn)行讀取。</p><p> 當(dāng)播放視頻文件時(shí),視頻名稱、視頻時(shí)間長(zhǎng)度等信息顯示在屏幕相應(yīng)位置。</p><p><b> 3.2系統(tǒng)結(jié)構(gòu)設(shè)計(jì)</b></p><p> 本次課題設(shè)計(jì)的Android視頻播放器應(yīng)用程序組要由4個(gè)Activ
77、ity組成,分別是Mediaplayer Activity,MediaList Activity,F(xiàn)ileChooser Activity,UpdateMediaList Activity。每一個(gè)Activity實(shí)現(xiàn)相應(yīng)部分的功能,每一個(gè)Activity對(duì)應(yīng)有一個(gè)或多個(gè).xml的布局文件。在布局文件中,添加用來實(shí)現(xiàn)相應(yīng)部分功能的各種控件。如圖3-1所示。</p><p> 圖3-1 系統(tǒng)結(jié)構(gòu)框圖</p&g
78、t;<p> MeidaPlayerActivity</p><p> MediaplayerActivity中包含的控件數(shù)量最多,與用戶打交道也最為廣泛,每個(gè)控件都對(duì)應(yīng)有各自的功能,如圖3-2所示。</p><p> 圖3-2 MediaplayerActivity控件分布</p><p> 第一行中:CheckButton,查看列表按鈕。按
79、下此按鈕之后,顯示手機(jī)中存在的視頻文件,并以列表的形式顯示顯示在手機(jī)屏幕上。關(guān)于視頻文件的列表的顯示,在MediaListActivity中實(shí)現(xiàn)。ChooserButton,添加視頻按鈕。按下此按鈕之后,手機(jī)屏幕將顯示SDCard中文件列表,通過瀏覽不同路徑,添加所需的視頻文件至視頻列表中。ImageButton,之后的三個(gè)ImageButton分別是volumeButton,upButton,downButton,即聲音按鈕,加大音量
80、按鈕,減小音量按鈕。</p><p> 第二行中:TextView,文本視圖控件。前一個(gè)TextView用來顯示“視頻文件:”,即一個(gè)提示信息;后一個(gè)TextView用來顯示正播放的視頻文件的名稱。然后是ImageButton控件,這里添加一個(gè)聲音的小圖標(biāo)。最后是一個(gè)ProgressBar控件,該控件是一個(gè)進(jìn)度條。當(dāng)我們加大或者減小音量時(shí),該進(jìn)度條會(huì)相應(yīng)的發(fā)生變化。</p><p>
81、第三行中:一個(gè)SurfaceView控件加上一個(gè)ImageView控件。SurfaceView用來將視頻畫面投放到手機(jī)屏幕上,而ImageView用來顯示視頻是否處于播放狀態(tài)。即當(dāng)暫停視頻播放時(shí),ImageView處于Visible(可見)狀態(tài),當(dāng)繼續(xù)之前暫停的視頻播放時(shí),ImageView處于InVisible(不可見)狀態(tài)。</p><p> 第四行中:兩個(gè)TextView分別用來顯示當(dāng)前正雜播放的視頻的時(shí)
82、間信息,前者顯示當(dāng)前播放時(shí)間長(zhǎng)度,后者顯示視頻文件的最大時(shí)間長(zhǎng)度。</p><p> 第五行中:SeekBar,另一種進(jìn)度條,隨著視頻播放進(jìn)度而變化。</p><p> 第六行中:六個(gè)ImageButton控件,分別為play,pause,reset,stop,last,next,即播放按鈕,暫停按鈕,重置按鈕,停止按鈕,上一個(gè)按鈕,下一個(gè)按鈕。</p><p>
83、; MediaListActivity</p><p> 接下來是MediaListActivity。該Activity引用的是medialist.xml布局文件。由于只需要顯示視頻文件列表,所以在medialist.xml布局文件中只添加了一個(gè)ListView控件用來實(shí)現(xiàn)視頻列表的顯示功能,如圖3-3所示。</p><p> 圖3-3 MediaList</p>&l
84、t;p> FilechooserActivity</p><p> 然后是FileChooserActivity,當(dāng)按下添加視頻Button時(shí),由MediaplayerActivity跳轉(zhuǎn)到此Activity,并根據(jù)用戶操作來完成添加視頻文件的操作。該Activity引用fileselect.xml布局文件。該布局文件中包含一個(gè)TextView,一個(gè)ListView,和兩個(gè)Button控件。</p
85、><p> TextView用來顯示當(dāng)前正在瀏覽的路徑,ListView用來顯示當(dāng)前路徑下存在的文件或者文件夾。當(dāng)選中視頻文件后,單擊確認(rèn)Button即可。若不打算添加,則取消即可,如圖3-4所示。</p><p> 圖3-4FileChooserActivity布局</p><p> UpdateMediaListActivity</p><
86、p> 最后是UpdateMediaListActivity。當(dāng)用戶通過Menu菜單點(diǎn)擊“更新列表”選項(xiàng)時(shí),程序跳轉(zhuǎn)到此Activity。該Activity引用updatelist.xml布局文件。該布局文件中也僅僅只包含一個(gè)ListView控件,用來顯示更新選項(xiàng)。如圖3-5所示。</p><p><b> 圖3-5 更新列表</b></p><p><
87、b> 第四章 測(cè)試</b></p><p> 4.1測(cè)試環(huán)境和條件</p><p> 本次軟件測(cè)試環(huán)境在AVD(Android Virtual Device)和真機(jī)中測(cè)試。</p><p> 真機(jī)硬件配置:手機(jī)型號(hào):ZTE V889D;Android版本;4.0.4;內(nèi)核版本號(hào):3.0.8-perf-svn22921zte-kernel@Z
88、droid-SMT;RAM:512M;CPU:800MHz。</p><p><b> 4.2測(cè)試</b></p><p><b> 系統(tǒng)運(yùn)行的流程如下</b></p><p> 運(yùn)行程序后,首先進(jìn)入的是主Activity,即MediaPlayer Activity。如圖4-1。</p><p&g
89、t; 圖4-1 程序運(yùn)行時(shí)主界面</p><p> 當(dāng)點(diǎn)擊菜單Menu時(shí),會(huì)出現(xiàn)三個(gè)選項(xiàng):播放列表,更新列表,退出。如圖4-2所示。</p><p><b> 圖4-2 菜單選項(xiàng)</b></p><p> 選擇更新列表操作,進(jìn)入U(xiǎn)pdateMediaList Activity,如圖4-3所示。</p><p>
90、 圖4-3 更新列表操作</p><p> 單擊選擇自動(dòng)搜索,程序自行掃描SDCard中的文件,并將掃描到的視頻文件添加到視頻列表中去。如圖4-4和圖4-5所示。</p><p> 圖4-4 自動(dòng)搜索視頻文件</p><p> 圖4-5 自動(dòng)更新結(jié)果</p><p> 搜索完成后點(diǎn)擊產(chǎn)看列表查看視頻文件列表,也可以通過菜單中的播放列表
91、選項(xiàng)查看。查看結(jié)果如圖4-6所示。</p><p> 圖4-6 查看視頻文件列表</p><p> 在更新列表界面下,用戶也可以通過手動(dòng)添加來添加視頻文件。如圖4-7所示,被選中的視頻文件會(huì)被打上對(duì)勾,以表示選中。</p><p> 圖4-7手動(dòng)添加視頻文件</p><p> 單擊確定按鈕完成添加。添加后顯示圖4-8。</p&g
92、t;<p> 圖4-8 添加視頻文件完成</p><p> 接下來從視頻列表中選擇一個(gè)視頻文件來播放。如圖4-9所示。</p><p> 圖4-9 播放視頻文件</p><p> 由上圖可知,視頻播放時(shí),可以獲得一些視頻文件信息。如視頻名稱,播放進(jìn)度,視頻時(shí)長(zhǎng),視頻后綴名。當(dāng)按下暫停按鈕時(shí),視頻暫停播放,并且Image View顯示出來。如圖4
93、-10所示。</p><p> 圖4-10 暫停視頻播放</p><p> 再按下play按鈕即可繼續(xù)視頻播放,若按下reset按鈕,怎視頻從頭開始播放。視頻的進(jìn)度可以通過進(jìn)度條直接進(jìn)行拖拽。通過調(diào)節(jié)音量的3個(gè)Button可以對(duì)音量進(jìn)行調(diào)節(jié)。按下Volume Button時(shí),視頻靜音,此時(shí)Volume Button也改變。按下加大或者減小按鈕時(shí),聲音進(jìn)度條顯示并發(fā)生相應(yīng)的變化。如圖4-
94、11和圖4-12所示。</p><p> 圖4-11 靜音操作</p><p> 圖4-12 聲音進(jìn)度條變化</p><p> 在視頻播放過程中,若將手機(jī)屏幕橫置,并不能實(shí)現(xiàn)視頻的自動(dòng)旋轉(zhuǎn),原因在于重力感應(yīng)功能沒有能夠?qū)崿F(xiàn),如圖4-13所示。</p><p> 圖4-13 手機(jī)屏幕橫置</p><p> 關(guān)于
95、重力感應(yīng)這部分功能,Android中的很多游戲的游戲都使用了重力感應(yīng)的技術(shù),簡(jiǎn)單來說,Android重力感應(yīng)系統(tǒng)的坐標(biāo)系下,以屏幕的左下方為原點(diǎn)箭頭指向的方向?yàn)檎?。?10到10,以浮點(diǎn)數(shù)為等級(jí)單位,如圖4-14所示。</p><p> 手機(jī)屏幕向上(z軸朝天)水平放置的時(shí)侯,(x,y,z)的值分別為(0,0,10);</p><p> 手機(jī)屏幕向下(z軸朝地)水平放置的時(shí)侯,(x,y
96、,z)的值分別為(0,0,-10);</p><p> 手機(jī)屏幕向左側(cè)放(x軸朝天)的時(shí)候,(x,y,z)的值分別為(10,0,0);</p><p> 手機(jī)豎直(y軸朝天)向上的時(shí)候,(x,y,z)的值分別為(0,10,0);</p><p> 其他的如此類推,規(guī)律就是:朝天的就是正數(shù),朝地的就是負(fù)數(shù)。利用x, y, z三個(gè)值求三角函數(shù),就可以精確檢測(cè)手機(jī)的
97、運(yùn)動(dòng)狀態(tài)了。</p><p> 圖4-14 重力感應(yīng)下系統(tǒng)坐標(biāo)</p><p> 對(duì)于重力感應(yīng)相關(guān)函數(shù)、方法的具體實(shí)現(xiàn),以及如何監(jiān)聽手機(jī)的運(yùn)動(dòng)狀態(tài),由于需要與視頻對(duì)象綁定,并實(shí)現(xiàn)相應(yīng)的變化,此功能較為復(fù)雜因此暫未實(shí)現(xiàn)。</p><p> 至此,視頻播放器功能測(cè)試完畢。</p><p><b> 4.3測(cè)試結(jié)果分析</b
98、></p><p> 在程序測(cè)試中,既在虛擬機(jī)中進(jìn)行了測(cè)試,也在真機(jī)中進(jìn)行了測(cè)試。主要是從方便的角度出發(fā)。在虛擬機(jī)中,對(duì)于程序運(yùn)行到各個(gè)環(huán)節(jié)的截圖操作十分方便,容易及時(shí)捕捉,便于記錄并觀察。但虛擬設(shè)備無法進(jìn)行視頻的播放,故在真機(jī)中測(cè)試??傮w來說,視頻播放還是很流暢的,各部分的功能都能很好的實(shí)現(xiàn)。但對(duì)于用戶的操作,程序不能第一時(shí)間響應(yīng),表現(xiàn)出有些許延遲,可能是由于硬件薄弱的問題造成的,主要是因?yàn)镽AM偏小,
99、僅僅是有512M,加上CPU頻率不到1GHz。所以,程序運(yùn)行稍微偏多,CPU負(fù)擔(dān)就會(huì)比較大,就會(huì)變的有點(diǎn)卡。界面上不算十分華麗,但也能給用戶帶來不錯(cuò)的體驗(yàn),基本的視頻播放功能都可以正常運(yùn)行。</p><p><b> 結(jié) 論</b></p><p> 經(jīng)過幾個(gè)月的不斷努力,畢業(yè)設(shè)計(jì)終于完成。在本次畢業(yè)設(shè)計(jì)的過程中,通過自身的不斷努力和學(xué)習(xí),通過指導(dǎo)老師王曉峰
100、老師的細(xì)心指導(dǎo),使我的提出問題、分析問題、解決實(shí)際問題的能力有了很大的提高,同時(shí)也深切的體會(huì)到理論與實(shí)踐相結(jié)合的重要性,認(rèn)識(shí)到在實(shí)踐中運(yùn)用知識(shí)研究、解決問題的能力和自學(xué)能力是十分重要的。通過這次的畢業(yè)設(shè)計(jì),不僅讓我學(xué)到了更多的東西,最終使我對(duì)一些新知識(shí)的學(xué)習(xí)上有了很多經(jīng)驗(yàn),相信在以后的工作學(xué)習(xí)中也會(huì)有很大的幫助。</p><p> 經(jīng)過這幾個(gè)月的努力,本次畢業(yè)設(shè)計(jì)的主要學(xué)習(xí)成果有:</p><
101、;p> ?。?)更加了解了Mediaplayer對(duì)象的狀態(tài)問題。</p><p> ?。?)學(xué)習(xí)了掃描SD Card中的文件的方法。</p><p> ?。?)熟悉了Android工程項(xiàng)目的結(jié)構(gòu)目錄。</p><p> ?。?)了解并能夠簡(jiǎn)單實(shí)用更多的Android控件。</p><p> 在程序設(shè)計(jì)中,還是碰到了一些問題,下面列舉一
102、些較為關(guān)鍵的:</p><p> (1)在程序開始的初期,搭建Android開發(fā)運(yùn)行環(huán)境時(shí),出現(xiàn)了一些小小的問題。工欲善其事,必先利其器。在添加Android-SDK-Windows至系統(tǒng)環(huán)境變量時(shí),添加過后,在CMD環(huán)境并不能使用Android相關(guān)的一些命令。具體問題不是很清楚,但在重新安裝JDK、再次添加環(huán)境變量之后可以正常使用。此外,對(duì)Android-SDK-Windows進(jìn)行升級(jí),再安裝ADT插件,出現(xiàn)
103、插件安裝失敗問題。之后查閱資料了解到,Android-SDK-Windows不能盲目升級(jí)過高,應(yīng)當(dāng)與ADT版本搭配使用才行。但Android-SDK-Windows一旦升級(jí)過后,不能降級(jí)。這時(shí)候使用一個(gè)小技巧即可。進(jìn)入到Android-SDK-Windows的一個(gè)目錄,修改一個(gè)配置文件,將Android-SDK-Windows的版本修改和ADT版本相同即可。環(huán)境搭建工作到此完成了。</p><p> (2)在程
104、序開發(fā)過程中,遇到問題是常有的事了。最多的就是Android中各種方法實(shí)現(xiàn)什么樣的功能,方法的調(diào)用,方法的重用,方法的復(fù)寫等等,還有就是方法的參數(shù)問題。這里可以參考E:\android-sdk-windows\docs\index.html文檔。這是Android的幫助文檔,里面包含了所有Android.jar包的方法及其用法。包括詳細(xì)的方法功能介紹和參數(shù)介紹,如何調(diào)用,何時(shí)調(diào)用等等。是學(xué)習(xí)Android的最好的參考資料。</p&
105、gt;<p><b> 參考文獻(xiàn)</b></p><p> 靳巖,姚尚郎. Google Android開發(fā)入門與實(shí)踐[M/CD]. 北京:人民郵電出版社, 2009</p><p> 余志龍,陳旻勛等. Google Android SDK開發(fā)范例大全[M]. 北京:人民郵電出版社, 2009</p><p> 公磊,周
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android的視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android平臺(tái)的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于android的視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)論文 .doc
- 基于android平臺(tái)的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文——基于android音樂播放器的設(shè)計(jì)
- 基于android的音樂播放器畢業(yè)論文
- 基于android的音樂播放器的設(shè)計(jì)-畢業(yè)論文
- 基于android平臺(tái)的視頻播放器設(shè)計(jì)論文
- 基于android技術(shù)的網(wǎng)絡(luò)視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android平臺(tái)的音樂播放器-畢業(yè)論文
- 畢業(yè)論文——基于android平臺(tái)的音樂播放器
- 畢業(yè)論文--android在線音樂播放器設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于Android音樂播放器的設(shè)計(jì)與開發(fā)畢業(yè)論文.doc
- 基于Android平臺(tái)的視頻播放器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于android技術(shù)的網(wǎng)絡(luò)視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文設(shè)計(jì) 基于android手機(jī)平臺(tái)的音樂播放器
- 基于android的多功能視頻播放器的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)2
- 基于android手機(jī)平臺(tái)的音樂播放器-畢業(yè)論文
評(píng)論
0/150
提交評(píng)論