軟件工程畢業(yè)論文-基于android系統(tǒng)的音樂播放器的實現(xiàn)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p>  基于Android系統(tǒng)的音樂播放器的實現(xiàn)</p><p><b>  摘 要</b></p><p>  當(dāng)今社會的生活節(jié)奏越來越快,隨著硬件移動設(shè)

2、備的越來越先進,人們對移動設(shè)備的要求也越來越高,從以前的追求技術(shù)到現(xiàn)在的追求視覺,因此,也逐步的提高了對系統(tǒng)的要求,本文主要是對Android系統(tǒng)上音樂播放器應(yīng)用程序的設(shè)計與實現(xiàn)進行討論。本論文的音樂播放器采用了Android開源系統(tǒng)技術(shù),利用Java語言和Eclipse編輯工具對播放器進行編寫,同時給出了詳細(xì)的系統(tǒng)設(shè)計過程、部分界面圖及主要功能運行流程圖,本文還對開發(fā)過程中遇到的問題和解決方法進行了詳細(xì)的討論,該音樂播放器集播放、暫停

3、、停止、上一首、下一首、音量調(diào)節(jié)、歌詞顯示等功能于一體,性能良好,在Android系統(tǒng)中能獨立運行。該播放器還擁有對手機文件瀏覽器的訪問功能、歌曲播放模式、以及歌詞開閉狀態(tài)的友好設(shè)置。</p><p>  關(guān)鍵詞:Android;開源系統(tǒng);音樂播放器</p><p><b>  Abstract</b></p><p>  The pace o

4、f life in today's society, with more advanced hardware mobile devices for mobile devices, people more and more is also high, the requirements from the previous pursuit to pursue the visual technology, therefore, also

5、 gradually improve the system requirements, the paper main-ly is to take on a music player from system design and realization of the application is discussed. Take the system is an open source, it is based on the operat

6、ing system, use the Linux music play-er of the Androi</p><p>  Key Words:Android;open source system;music player</p><p><b>  目錄</b></p><p><b>  第一章 緒論1</b>

7、</p><p>  1.1 選題的目的及意義1</p><p>  1.2 項目國內(nèi)外現(xiàn)狀1</p><p><b>  1.3論文結(jié)構(gòu)1</b></p><p>  第二章 相關(guān)技術(shù)分析3</p><p>  2.1 Android應(yīng)用開發(fā)語言3</p><p&g

8、t;  2.2 Android應(yīng)用程序組件3</p><p>  2.3 Intent介紹4</p><p>  2.4 AndroidManifest.xml文件4</p><p>  第三章 需求分析6</p><p>  3.1 軟件目標(biāo)6</p><p>  3.2 功能需求6</p>

9、<p>  3.3 系統(tǒng)界面需求6</p><p>  3.4 系統(tǒng)性能需求6</p><p>  3.5 運行環(huán)境需求7</p><p>  第四章 系統(tǒng)設(shè)計8</p><p>  4.1 設(shè)計思想8</p><p>  4.2 系統(tǒng)功能結(jié)構(gòu)圖8</p><p>  4

10、.3 開發(fā)語言簡介9</p><p>  4.3.1 Android簡介9</p><p>  4.3.2 Android基本框架(Android Architecture)9</p><p>  4.3.3 Android Features特性11</p><p>  4.4 Android音樂播放器的工程11</p>

11、<p>  4.4.1 Android項目11</p><p>  4.4.2 Android 工程程序結(jié)構(gòu)12</p><p>  4.4.3 AndroidManifest.xml文件12</p><p>  第五章 系統(tǒng)實現(xiàn)15</p><p>  5.1播放列表15</p><p>  

12、5.2 播放音樂17</p><p>  5.3 暫停18</p><p>  5.4 上一首18</p><p>  5.5 停止播放19</p><p>  5.6 下一首19</p><p>  5.7 進度條改變19</p><p>  第六章 總結(jié)與展望21&l

13、t;/p><p><b>  6.1 總結(jié)21</b></p><p><b>  6.2 展望21</b></p><p><b>  參考文獻22</b></p><p><b>  致 謝23</b></p><p>

14、;<b>  第一章 緒論</b></p><p>  1.1 選題的目的及意義</p><p>  現(xiàn)今社會生活緊張,而欣賞音樂是其中最好的舒緩壓力的方式之一,本項目的目的是開發(fā)一個可以播放主流音樂文件格式的播放器,本設(shè)計的實現(xiàn)的這主要功能是播放Mp3,Wav多種格式的音樂文件,并且能夠控制播放,暫停,停止,上一曲,下一曲,音量調(diào)節(jié),視覺外觀,播放列表和歌曲文件的管

15、理操作等多種播放控制功能,界面簡明,操作簡單。 </p><p>  本項目是一款基于Android手機平臺的音樂播放器,使Android手機擁有個性的多媒體播放器,使手機顯得更生動靈活化,與人們更為接近,讓手機主人隨時隨地處于音樂視頻的旋律之中。使人們的生活更加多樣化。也使設(shè)計者更加熟練Android的技術(shù)和其它在市場上的特點.</p><p>  1.2 項目國內(nèi)外現(xiàn)狀</p&g

16、t;<p>  當(dāng)今社會的生活節(jié)奏越來越快,人們對手機的要求也越來越高,由于手機市場發(fā)展迅速,使得手機操作系統(tǒng)也出現(xiàn)了不同各類,現(xiàn)在的市場上主要有三個手機操作系統(tǒng),Windows mobile,symbian,以及谷歌的Android操作系統(tǒng),其中占有開放源代碼優(yōu)勢的Android系統(tǒng)有最大的發(fā)展前景。那么能否在手機上擁有自己編寫的個性音樂播放器呢?能的,谷歌Android系統(tǒng)就能做到。本文的音樂播放器就是基于谷歌Andr

17、oid手機平臺的播放器。</p><p>  Android:是谷歌于2007年公布的開放式源代碼手機系統(tǒng),它的開放性就優(yōu)于其它封閉式的手機系統(tǒng),因此,任何人都可能根據(jù)自己的喜好將手機系統(tǒng)中的所有功能重新編寫。這使得越來越多的人關(guān)注這個操作系統(tǒng)。本次作品音樂播放器就是基于Android平臺的[2]。</p><p>  隨著計算機的廣泛運用,手機市場的迅速發(fā)展,各種音頻視頻資源也在網(wǎng)上廣為

18、流傳,這些資源看似平常,但已經(jīng)漸漸成為人們生活中必不可少的一部分了。于是各種手機播放器也緊跟著發(fā)展起來,但是很多播放器一味追求外觀花哨,功能龐大,對用戶的手機造成了很多資源浪費,比如CPU,內(nèi)存等的占用率過高,在用戶需要多任務(wù)操作時,受到了不小的影響,帶來了許多不便,而對于大多數(shù)普通用戶,許多功能用不上,形同虛設(shè)。針對以上各種弊端,選擇了開發(fā)多語種的音頻視頻播放器,將各種性能優(yōu)化,繼承播放器的常用功能,滿足一般用戶(如聽歌,看電影)的需

19、求,除了能播放常見格式的語音視頻文件,高級功能:還能播放RMVB格式的視頻文件。此外,還能支持中文、英文等語言界面。</p><p><b>  1.3論文結(jié)構(gòu)</b></p><p>  第一章:緒論。主要是對該設(shè)計目的及國內(nèi)外現(xiàn)狀的描述。</p><p>  第二章:相關(guān)技術(shù)分析。對該設(shè)計所用到的各項技術(shù)進行一下描述。</p>

20、<p>  第三章:需求分析。主要介紹該設(shè)計的系統(tǒng),功能,界面,運行環(huán)境等需求。</p><p>  第四章:系統(tǒng)設(shè)計。介紹該系統(tǒng)的基本構(gòu)架,設(shè)計思想,開發(fā)語言及Android工程等。</p><p>  第五章:系統(tǒng)實現(xiàn)。簡要地描述該系統(tǒng)的運行過程及結(jié)果。</p><p>  第六章:總結(jié)與展望。對本次設(shè)計進行一次簡要的總結(jié)。</p>&

21、lt;p>  第二章 相關(guān)技術(shù)分析</p><p>  2.1 Android應(yīng)用開發(fā)語言 </p><p>  Java是Android上的主流開發(fā)語言,各種支持也最完善。Android發(fā)布的API和SDK也都主要是面向Java開發(fā)人員的。我們的播放器實例也是用Java開發(fā)的。</p><p>  2.2 Android應(yīng)用程序組件 </p>

22、<p>  Android應(yīng)用程序最大的一個特點就是每個應(yīng)用都由若干組件構(gòu)成。而且各個應(yīng)用程序的組件還可以相互調(diào)用(需要在代碼中設(shè)置相應(yīng)權(quán)限)。例如假設(shè)我們需要編寫一個內(nèi)嵌有網(wǎng)頁的程序,那么我們無需親自編寫瀏覽器,而是可以直接調(diào)用系統(tǒng)自帶的Chrome Lite瀏覽器組件。又如假設(shè)我們編寫了兩個應(yīng)用程序,其中一個程序中有列表顯示圖片的組件,那么我們在另外一個應(yīng)用程序中就可以使用該組件,而不需要再編寫該功能。也就是說,不同于我們

23、平常編寫的程序,Android的應(yīng)用程序不是單一入口,而是可以從代碼的不同位置啟動。這就要依靠組件來實現(xiàn)。 Android應(yīng)用程序的組件有以下四種:</p><p>  (1)Activity </p><p>  一個activity實際上表現(xiàn)出來的就是一個程序的界面。這個界面可能有許多種不同的形式,比如有列表形式,有文字形式,有圖像格子等形式。一個應(yīng)用程序也可能有不止一個activit

24、y。比如一個短消息的程序,需要有列表顯示所有消息的activity,還至少需要一個編輯短消息的activity(界面),還可能需要設(shè)置、菜單等界面。</p><p>  每個activity都有一個默認(rèn)的窗口用于繪制界面,一般情況下,它是充滿全屏的,但是我們可以通過程序控制它,使其小于屏幕大小,也可以控制其浮動于其它窗口之上(如Android中的Toast信息)。 </p><p>  A

25、ctivity中顯示出來的內(nèi)容其實是由view堆疊形成的,view是由View基類派生出來的各種形式的界面元素,如ListView,GridView等等,通過組合這些view,就形成了一個可見的activity。我們可以用Activity.setContentView()方法來設(shè)置一個activity中所要顯示的view。</p><p>  (2)Service </p><p>  s

26、ervice是一種沒有界面的組件,同我們平常在Windows或Linux系統(tǒng)中所理解的“服務(wù)”一樣,Android上的service也是運行在后臺的,運行時間可以從系統(tǒng)啟動到系統(tǒng)關(guān)閉為止。對于許多應(yīng)用程序來說,service組件是至關(guān)重要的。以下載管理器為例,用戶肯定希望能夠在切換到其它程序時仍然在后臺進行下載,這就需要用到service完成下載工作。而顯示下載進度、已下載文件等信息則由activity完成,同時我們還希望能控制下載過程

27、,如停止、繼續(xù)等,這就需要activity與service之間進行通信。 Android允許activity連接到或者綁定到service上,這樣就可以讓用戶在界面上控制后臺service的行為。</p><p>  (3)Broadcast receiver </p><p>  Broadcast意為廣播消息,Android系統(tǒng)自身會發(fā)出許多廣播消息,如電量不足,用戶修改了全局設(shè)置等,

28、各個應(yīng)用程序也以向整個系統(tǒng)廣播消息,如文件下載完畢等。 </p><p>  Broadcast receiver則是程序中專門用來接收廣播消息的組件,它沒有界面顯示,只負(fù)責(zé)監(jiān)聽、接收廣播消息,然后根據(jù)程序邏輯,啟動其它組件去處理廣播消息。它可以啟動一個activity來同用戶交互,也可以使用NotificationManager向用戶發(fā)出通知。NitificationManager的通知形式有許多種,比如說振

29、動、響鈴、閃LED燈,還可以在Android界面的消息欄處顯示信息。</p><p>  (4)Content provider </p><p>  content provider是一種為其它應(yīng)用程序提供數(shù)據(jù)的組件。這些數(shù)據(jù)可以保存在文件中,也可以保存在SQLite數(shù)據(jù)庫中,還可以以其它任何有效的方式保存。ContentProvider類為我們提供了一系列保存數(shù)據(jù)的方法供我們調(diào)用,可以

30、很方便地存儲數(shù)據(jù)。其它應(yīng)用程序在需要使用這些數(shù)據(jù)時,可以用ContentResolver對象,使用其中的方法。ContentResolver可以與任何content provider交互,獲取其中的數(shù)據(jù)。 只要需要某個組件,Android就會盡力保證它的可用:如果該組件還沒啟動,就啟動它,如果該組件所屬的應(yīng)用程序還沒擁有一個進程,則為它啟動一個進程,如果系統(tǒng)資源不足以容納一個新的進程,則將后臺的某個進程殺死為新進程騰出資源。以與任何co

31、ntent provider交互,獲取其中的數(shù)據(jù)。 </p><p>  只要需要某個組件,Android就會盡力保證它的可用:如果該組件還沒啟動,就啟動它,如果該組件所屬的應(yīng)用程序還沒擁有一個進程,則為它啟動一個進程,如果系統(tǒng)資源不足以容納一個新的進程,則將后臺的某個進程殺死為新進程騰出資源。</p><p>  2.3 Intent介紹 </p><p>  所

32、謂Intent,就是一種運行時的綁定機制在應(yīng)用程序運行時連接兩個不同的組件。一般的應(yīng)用是通過Intent向Android系統(tǒng)發(fā)出某種請求,然后Android系統(tǒng)會根據(jù)請求查詢各個組件聲明的IntentFilter,找到需要的組件并運行它。 前面介紹的Activity、Service及BroadcastReceiver組件之間的通信全部使用的是Intent,但是各個組件使用的Intent機制不同。</p><p>

33、  2.4 AndroidManifest.xml文件 </p><p>  AndroidManifest.xml是每一個應(yīng)用都需要的文件, 位于應(yīng)用根目錄下,它 描述了程序包的全局變量, 包括暴露的應(yīng)用組件(activities, services等等)和為每個組件的實現(xiàn)類, 什么樣的數(shù)據(jù)可以操作,以及在什么地方運行。 </p><p>  AndroidManifest.xml文件是

34、一個結(jié)構(gòu)化的XML文件,它除了包含有各個組件的信息,還包括許多其它的信息,它的基本樣式如下所示:</p><p>  <?xml version="1.0" encoding="utf-8"?> </p><p>  <manifest . . . > </p><p>  <applic

35、ation . . . > </p><p>  <activity android:name="com.example.project.FreneticActivity" </p><p>  android:icon="@drawable/small_pic.png" </p><p>  an

36、droid:label="@string/freneticLabel" . . . ></p><p>  </activity> </p><p><b>  . . .</b></p><p>  </application> </

37、p><p>  </manifest> </p><p>  可以看出,name,icon,lable這些屬性就分別指activity的名稱、圖標(biāo)、標(biāo)識。我們通過manifest描述程序的信息,Android系統(tǒng)就能讀取出來并產(chǎn)生相應(yīng)的行為。 </p><p><b>  第三章 需求分析</b></p><p&g

38、t;<b>  3.1 軟件目標(biāo)</b></p><p>  本系統(tǒng)屬于用戶常用的音樂播放器。可以方便用戶平時對音樂文件的操作。本系統(tǒng)應(yīng)達(dá)到以下目標(biāo): </p><p> ?。?)軟件采用人機交互的方式,界面美觀友好,操作靈活、方便、富有個性化。</p><p> ?。?)能夠?qū)σ魳肺募M行有效的管理。</p><p>

39、 ?。?)系統(tǒng)應(yīng)最大限度地實現(xiàn)易維護性和易操作性。</p><p><b>  3.2 功能需求</b></p><p>  功能需求定義了開發(fā)人員必須實現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了用戶的業(yè)務(wù)需求。用戶需求文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù)。針對音樂播放器分別對音樂播放、在線音樂播放等功能進行詳細(xì)的調(diào)研和分析,總結(jié)出如下的用戶需求信息:即播放

40、,暫停,上一首,下一首,退出等功能。如圖2-1所示:</p><p>  圖2-1播放器主要功能 </p><p>  3.3 系統(tǒng)界面需求</p><p>  播放器界面要求布局合理,顏色舒適,控制按鈕友好,要求整體有一個主要的元素標(biāo)準(zhǔn),統(tǒng)一的主題思想。</p><p>  3.4 系統(tǒng)性能需求</p><p>  

41、根據(jù)Android手機系統(tǒng)要求無響應(yīng)時間為5秒,所以就有如下性能要求:</p><p>  當(dāng)要求歌曲播放時,程序響應(yīng)時間最長不能超過5秒</p><p>  當(dāng)要求歌曲暫停時,程序響應(yīng)時間最長不能超過5秒</p><p>  當(dāng)要求歌曲停止時,程序響應(yīng)時間最長不能超過5秒</p><p>  當(dāng)要求歌曲上/下一首時,程序響應(yīng)時間最長不能超過

42、5秒</p><p>  當(dāng)要求進行清單列表時,程序響應(yīng)時間最長不能超過5秒</p><p><b>  功能流程圖2-2:</b></p><p><b>  圖2-2功能流程</b></p><p>  3.5 運行環(huán)境需求</p><p>  操作系統(tǒng):Android手

43、機基于Linux操作系統(tǒng)</p><p>  支持環(huán)境:Android 1.5 - 4.0.1版本</p><p>  開發(fā)環(huán)境:Eclipse 3.5 ADT 0.95 </p><p><b>  第四章 系統(tǒng)設(shè)計</b></p><p>  軟件功能設(shè)計是使整個軟件能基本實現(xiàn)音樂的播放、上一首、下一首、暫停等功能,

44、能讓用戶通過本軟件欣賞音樂。在線音樂瀏覽和下載,背景皮膚的切換等功能更好的增強用戶體驗。</p><p><b>  4.1 設(shè)計思想</b></p><p> ?。?)將系統(tǒng)分成幾個相對獨立的模塊。</p><p> ?。?)分層的模塊化程序設(shè)計思想,整個系統(tǒng)采用模塊化結(jié)構(gòu)設(shè)計。作為應(yīng)用程序有較強的可操作性和擴展性。</p>&

45、lt;p> ?。?)合理的數(shù)據(jù)流設(shè)計,在應(yīng)用系統(tǒng)設(shè)計中,相對獨立的模塊間以數(shù)據(jù)流相互連接,使各模塊間的耦合性較低,方便系統(tǒng)運行,提高系統(tǒng)安全性。</p><p>  4.2 系統(tǒng)功能結(jié)構(gòu)圖</p><p>  根據(jù)上述需求分析,本Android版音樂播放器可分為以下幾個模塊: </p><p>  播放器基本功能如圖4-1所示:</p><

46、p>  圖 4-1 播放器基本功能</p><p>  4.3 開發(fā)語言簡介</p><p>  4.3.1 Android簡介</p><p>  Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開

47、放和完整的移動軟件。Android是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā)(在華注冊商標(biāo)名為“安致”),后由開放手機聯(lián)盟(Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術(shù),Google和其它幾

48、十個手機公司建立了開放手機聯(lián)盟。2010年1月,Google開始發(fā)表自家品牌手機電話的Nexus One。目前最新SDK版本為Android 4.0.3。</p><p>  4.3.2 Android基本框架(Android Architecture)</p><p>  Android平臺的基本框架如圖3-2所示。</p><p>  圖4-2 Android

49、基本框架圖</p><p>  Applications</p><p>  Application Android會同一個核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是用JAVA編寫的。</p><p>  (2)Application FrameWork</p>

50、<p>  開發(fā)者完全可以訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來簡化組件軟件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。該應(yīng)用程序重用機制使得組建可以被用戶替換。</p><p>  所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:</p><p>  可擴展的視圖(Views)可以

51、用來建應(yīng)用程序,包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons),甚至包括一個可嵌入的web瀏覽器</p><p>  內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享它們自己的數(shù)據(jù)。</p><p>  資源管理器(Resource Manager)提供非代碼資源的訪問,

52、如本地字符串,圖形,和分層文件(layout files)。</p><p>  通知管理器(Notification Manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。</p><p>  活動類管理器(Activity Manager)用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。</p><p>  Libraries庫</p>&

53、lt;p>  Android 包括一個被 Android 系統(tǒng)中各種不同組件所使用的 C/C++ 庫集。該庫通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些主要的核心庫:</p><p>  系統(tǒng) C 庫- 一個從 BSD 繼承來的標(biāo)準(zhǔn) C 系統(tǒng)函數(shù)庫( libc ),專門為基于 embedded linux 的設(shè)備定制。 媒體庫- 基于 PacketVideo OpenCORE;該庫支持錄放

54、,并且可以錄制許多流行的音頻視頻格式,還有靜態(tài)印像文件包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。 Surface Manager - 對顯示子系統(tǒng)的管理,并且為多個應(yīng)用程序提供2D和3D圖層的無縫融合。 LibWebCore - 一個最新的web瀏覽器引擎用來支持Android瀏覽器和一個可嵌入的web視圖。 SGL - 一個內(nèi)置的2D圖形引擎 3D libraries - 基于OpenGL ES

55、1.0 APIs實現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。 FreeType - 位圖(bitmap)和向量(vector)字體顯示。 SQLite 一個對于所有應(yīng)用程序可用,功能強勁的輕型關(guān)系型數(shù)據(jù)庫引擎。</p><p>  Android Runtime</p><p>  Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功

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

57、gt;  Dalvik虛擬機依賴于linux的一些功能,比如線程機制和底層內(nèi)存管理機制。</p><p><b>  Linux內(nèi)核</b></p><p>  Android 的核心系統(tǒng)服務(wù)依賴于 Linux 2.6 內(nèi)核,如安全性,內(nèi)存管理,進程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型。 Linux 內(nèi)核也同時作為硬件和軟件堆棧之間的硬件抽象層。未來發(fā)展老牌智能手機軟件平臺制造

58、商Symbian發(fā)言人則表示:Google的Android只不過是另一個linux,symbian對其它軟件與其形成的競爭并不感到擔(dān)心。除了北美之外,Symbian在其它地區(qū)智能手機市場都占有大部分市場份額。與iPhone相似,Android采用WebKit瀏覽器引擎,具備觸摸屏、高級圖形顯示和上網(wǎng)功能,用戶能夠在手機上查看電子郵件、搜索網(wǎng)址和觀看視頻節(jié)目等,比iPhone等其他手機更強調(diào)搜索功能,界面更強大,可以說是一種融入全部Web

59、應(yīng)用的單一平臺。</p><p>  4.3.3 Android Features特性</p><p>  Android系統(tǒng)有如下的幾大特性:</p><p>  應(yīng)用程序框架 支持組件的重用與替換</p><p>  Dalvik虛擬機 專門為移動設(shè)備做了優(yōu)化</p><p>  內(nèi)部集成瀏覽器 該瀏覽器基于開源的

60、WebKit引擎</p><p>  優(yōu)化的圖形庫 包括2D和3D圖形庫,3D圖形庫基于OpenGL ES</p><p>  多媒體支持 包括常見的音頻、視頻和靜態(tài)印象文件格式(如 MPEG4、H.264、MP3、AAC、 AMR、JPG、PNG、 GIF)</p><p>  GSM電話(依賴于硬件)</p><p>  藍(lán)牙Blueto

61、oth,EDGE,3G and WiFi (依賴于硬件)</p><p>  照相機,GPS,指南針,和加速度計 (依賴于硬件)</p><p>  豐富的開發(fā)環(huán)境 包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件</p><p>  4.4 Android音樂播放器的工程</p><p>  4.4.1 And

62、roid項目</p><p>  Android的四大基本組件:Activity(活動),Service(服務(wù)),BroadcastReceiver(廣播),ContentProvider(內(nèi)容提供者),各組件之間要進行切換需要一個意圖或企圖Intent類,通過啟動StartIntent()方法來使各組件進行跳轉(zhuǎn)。</p><p>  Android的五大布局方式:LinearLayou

63、t(線性布局) FrameLayout(幀布局) TableLayout(表格布局)AbsoluteLayout(絕對布局) RelativeLayout(相對布局)[11]</p><p>  五種布局方式可以相互嵌套,Android各種漂亮的界面都是通過嵌套布局而實現(xiàn)的。</p><p>  Android的線程,以及線程之間通信的中介:Handler類。</p><

64、;p>  Android配置文件:AndroidManifest.Xml及res資源文件中各種屬性布局方式引用的資源等。</p><p>  Android系統(tǒng)將插件ADT集成到了Eclipse工具上,因此,一個Android程序啟動后,系統(tǒng)會啟動一個模擬器(Emulator),該模擬器是一款手機板的樣式,擁有手機硬件的基本操作。</p><p>  4.4.2 Android 工程

65、程序結(jié)構(gòu)</p><p>  Android工程基本結(jié)構(gòu)目錄包括:src (源代碼)、gen(Android系統(tǒng)自動生成的常量)、Res(資源文件):主要存放程序界面的布局配置(.xml)文件和圖片資源。AndroidMainfes.xml 是四大組件的驅(qū)動配置文件,有它的存在,Android程序的四大組件才可以正常的跳轉(zhuǎn)。Android資源的類型和布局。</p><p><b>

66、;  表4-1工程結(jié)構(gòu)圖</b></p><p>  4.4.3 AndroidManifest.xml文件</p><p>  Android系統(tǒng)的任何一個程序啟動都需要AndroidManifest.xml來啟動程序,任何一個新建的工程目錄都會自動生成一個AndroidManifest.xml文件,此配置文件是整個程序能夠正常運行的核心,它里面包含了Android SDK的

67、版本,程序運行的默認(rèn)Activity,當(dāng)程序中的任何一個組件觸發(fā)事件后,系統(tǒng)都會自動的去AndroidManifest.xml中尋找標(biāo)識來作出相應(yīng)的操作。任何一個AndroidManifest.Xml文件的格式都應(yīng)為:</p><p>  <?xml version=“1.0” encoding=“utf-8”?></p><p>  <manifest></

68、p><p>  <application></p><p>  <activity></p><p>  <intent-filter></p><p>  <action/><category/></p><p>  </intent-filter>

69、 </p><p>  </activity></p><p>  </application></p><p>  <user-sdk/><uses-permission/></p><p>  </manifest></p><p>  Android系統(tǒng)

70、有一個編碼的規(guī)定,支持的編碼是"utf-8",當(dāng)程序中出現(xiàn)亂碼是,我們須將其編碼格式轉(zhuǎn)化為"utf-8".在 AndroidManifest.xml中會在第一行聲明一句:<?xml version="1.0" encoding="utf-8"?>。它是該系統(tǒng)支持的版本和編碼。在第二行定義了我們需要使用的架構(gòu),該架構(gòu)來自xmlns:Android=

71、http://schemas.Android.com/apk/res/Android。</p><p>  xmlns(XML namespace)是一個命名空間,它就像一條河的源頭一樣能讓我們找到系統(tǒng)架構(gòu),每一個配置文件必須有這個xmlns,否則程序中的所使用的所有資源將無法找到。</p><p>  在application元素我們定義Android:icon="@draw

72、able/icon",Android:label="@string/app_name",Android:icon是程序在手機中顯示的圖片,我們運用@drawable/icon表示了對res/drawable目錄下的icon.png的引用。@string/app_name表示了對res/value目錄下string.Xml中定義的app_name參數(shù)的引用。</p><p>  &l

73、t;application</p><p>  Android:icon=“@drawable/sendsong”</p><p>  Android:label=“@string/app_name”></p><p><b>  <activity</b></p><p>  Android:name=“.

74、main.StartActivity”</p><p>  Android:label=“@string/app_name”></p><p>  <intent-filter></p><p>  <action android:name=“android.intent.action.MAIN”/></p><p&

75、gt;  <category android:name=“android.intent.category.LAUNCHER”/></p><p>  </intent-filter></p><p>  </activity></p><p>  </application></p><p> 

76、 這是系統(tǒng)確定的首先要啟動的Activity是StartActivity。</p><p>  在intent-filter選項中,有action和category等等屬性,我們需要定義action為 Android.intent.action.MAIN,category的值為Android.intent.category.LAUNCHER,它們是系統(tǒng)的值,程序在解析到這些常用后就可以確定首先要啟動的Activi

77、ty。當(dāng)我們需要通過一個組件觸發(fā)另一個組件時,我們將設(shè)定action和category的其它屬性值,系統(tǒng)會根據(jù)我們設(shè)定的屬性值去AndroidManifest.Xml的application 中尋找標(biāo)識,任何一個Activity的action和category是唯一,所以程序在任何時候都能唯一啟動一個Activity,這樣,不同的Activity之間的跳轉(zhuǎn)就實現(xiàn)了。</p><p>  在AndroidManif

78、est.Xml中有一個根結(jié)點<uses-sdk>,它是我們需要定義的ADT版本,例如我們將其值設(shè)定為Android:minSdkVersion="10",則表示此Android工程所用的版本為2.3,Android還有1.1、1.5、1.6、2.0、2.1、2.2、2.3、3.0、4.0這幾個版本。</p><p>  如果我們需要對網(wǎng)絡(luò)進行訪問,比如打開一個網(wǎng)頁,剛我還需要設(shè)置一

79、個網(wǎng)絡(luò)訪問權(quán)限uses-permission,將其的值設(shè)置為Android:name="Android.permission.INTERNET,我們就可以訪問網(wǎng)絡(luò)了。當(dāng)然uses-permission還有很多其它的權(quán)限,例如GPS定位權(quán)限,瀏覽器數(shù)據(jù)存取權(quán)限com.Android.browser.permission.READ_HISTORY_BOOKMARKS等等。</p><p>  當(dāng)程序的任何一

80、個組件要用到時,都必須在AndroidManifest.Xml文件中聲明。四大組件要使用前都需要聲明,其聲明方式如下:</p><p>  <service></service></p><p>  <provider></provider></p><p>  <activity></activit

81、y></p><p>  <receiver></receiver></p><p>  其中聲明provider時還需要聲明其授權(quán) authorities。每個組件里面還有很多的屬性,會根據(jù)程序的具體需要定義不同的屬性。過濾器intent-filter 有兩種啟動方式來啟動界面。</p><p><b>  (1)顯示方式&

82、lt;/b></p><p>  顯示方式是在代碼中的直接啟動組件,啟動時會聲明Intent,在它的構(gòu)造方法Intent(組件1,組件2)中直接指定一個組件的名字,然后調(diào)用方法startIntent(intent)以啟動指定的組件。</p><p><b>  (2)隱式方式</b></p><p>  隱式方式是通過過濾器來過濾完成的,

83、啟動的組件必須滿足action和category的條件才能夠啟動該組件。這些屬性是在AndroidManifest.Xml文件中聲明的。兩種啟動方式都可以通過程序setAction(ACTION常量)和startActivity(intent)或配置文件兩種方式來實現(xiàn)組件的跳轉(zhuǎn)</p><p><b>  第五章 系統(tǒng)實現(xiàn)</b></p><p><b> 

84、 5.1播放列表</b></p><p>  播放列表是音樂播放器中的一個很重要的功能,點擊音樂播放器后,系統(tǒng)會自動對SD卡進行掃描,掃描到的所有音樂文件都會顯示在音樂列表中。這樣,我們就可能很方便的根據(jù)列表了解到歌曲,同時方便我們選擇喜歡聽的歌曲進行播放。具體的代碼如下:</p><p>  public class LocalMusicActivity extends Ac

85、tivity {</p><p>  private int[] _ids;// 保存音樂ID臨時數(shù)組</p><p>  private String[] _artists;// 保存藝術(shù)家</p><p>  private String[] _titles;// 標(biāo)題臨時數(shù)組</p><p>  private ListView lis

86、tview;// 列表對象</p><p>  private ScanSDCardReceiver receiver = null;// 掃描SD卡的實例</p><p>  private static final int SCAN = Menu.FIRST;//重寫菜單的常量</p><p>  private static final int ABOUT =

87、 Menu.FIRST + 1;</p><p>  * 定義查找音樂信息數(shù)組,1.標(biāo)題,2音樂時間,3.藝術(shù)家,4.音樂id,5.顯示名字,6.數(shù)據(jù)。</p><p>  String[] media_info = new String[] { MediaStore.Audio.Media.TITLE,</p><p>  MediaStore.Audio.Med

88、ia.DURATION, MediaStore.Audio.Media.ARTIST,</p><p>  MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME,</p><p>  MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID };<

89、/p><p><b>  @Override</b></p><p>  public void onCreate(Bundle savedInstanceState) {</p><p>  super.onCreate(savedInstanceState);</p><p>  requestWindowFeature

90、(Window.FEATURE_NO_TITLE);</p><p>  setContentView(R.layout.localmusic);</p><p>  listview = (ListView) findViewById(R.id.music_list);// 找ListView的ID</p><p>  listview.setOnItemClic

91、kListener(new MusicListOnClickListener());// 創(chuàng)建一個ListView監(jiān)聽器對象</p><p>  ShowMp3List();// 顯示音樂</p><p><b>  }</b></p><p><b>  @Override</b></p><p>

92、;  public boolean onCreateOptionsMenu(Menu menu) {</p><p>  menu.add(0, SCAN, 0, "掃描SD卡");</p><p>  menu.add(1, ABOUT, 1, "關(guān)于");</p><p>  return true;</p>

93、<p><b>  }</b></p><p><b>  @Override</b></p><p>  public boolean onOptionsItemSelected(MenuItem item) {</p><p>  if (item.getItemId() == SCAN) {</p&

94、gt;<p>  ScanSDCard();</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p><b>  * 顯示音樂列表</b></p><p>

95、;  private void ShowMp3List() {</p><p>  Cursor cursor = getContentResolver().query(</p><p>  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, media_info, null,</p><p>  null, MediaStor

96、e.Audio.Media.DEFAULT_SORT_ORDER);</p><p>  cursor.moveToFirst();// 將游標(biāo)移動到初始位置</p><p>  _ids = new int[cursor.getCount()];// 返回INT的一個列</p><p>  _artists = new String[cursor.getCount

97、()];// 返回String的一個列</p><p>  _titles = new String[cursor.getCount()];// 返回String的一個列</p><p>  for (int i = 0; i < cursor.getCount(); i++) {</p><p>  _ids[i] = cursor.getInt(3);&l

98、t;/p><p>  _titles[i] = cursor.getString(0);</p><p>  _artists[i] = cursor.getString(2);</p><p>  cursor.moveToNext();// 將游標(biāo)移到下一行</p><p><b>  }</b></p>

99、<p>  listview.setAdapter(new MusicListAdapter(this, cursor));// 用setAdapter裝載數(shù)據(jù)</p><p><b>  }</b></p><p><b>  * 點擊列表事件</b></p><p>  public class MusicL

100、istOnClickListener implements OnItemClickListener {</p><p>  public void onItemClick(AdapterView<?> arg0, View arg1, int position,</p><p>  long id) {</p><p>  playMusic(posit

101、ion);// 根據(jù)點擊位置來播放音樂</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  * 播放音樂方法</b></p><p>  public void playMusic(int position) {</

102、p><p>  Intent intent = new Intent(LocalMusicActivity.this,</p><p>  PlayMusicActivity.class);</p><p>  intent.putExtra("_ids", _ids);</p><p>  intent.putExtra(&

103、quot;_titles", _titles);</p><p>  intent.putExtra("_artists", _artists);</p><p>  intent.putExtra("position", position);</p><p>  startActivity(intent);<

104、/p><p><b>  finish();</b></p><p><b>  }</b></p><p><b>  * 掃描SD卡</b></p><p>  private void ScanSDCard() {</p><p>  IntentFi

105、lter filter = new IntentFilter(</p><p>  Intent.ACTION_MEDIA_SCANNER_STARTED);</p><p>  filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);</p><p>  receiver = new ScanSDCardRec

106、eiver();</p><p>  filter.addDataScheme("file");</p><p>  registerReceiver(receiver, filter);</p><p>  sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,</p><

107、p>  Uri.parse("file://"</p><p>  + Environment.getExternalStorageDirectory()</p><p>  .getAbsolutePath())));</p><p><b>  }</b></p><p><b>

108、  }</b></p><p>  運行結(jié)果如5-1圖所示:</p><p><b>  圖5-1 播放列表</b></p><p><b>  5.2 播放音樂</b></p><p>  播放音樂功能是音樂播放器的一個核心功能,在手機音樂播放器啟動后,選中你想要聽的音樂,點擊該功能

109、按鈕,你就能聽到該歌曲。具體代碼如下:</p><p>  protected void play() </p><p><b>  {</b></p><p>  flag = PLAY;</p><p>  playbtn.setImageResource(R.drawable.pause_button);<

110、/p><p>  Intent intent = new Intent();</p><p>  intent.setAction("org.music.service.LocalMusicService");</p><p>  intent.putExtra("op", PLAY);</p><p> 

111、 startService(intent);</p><p><b>  }</b></p><p>  運行結(jié)果如圖5-2所示:</p><p><b>  圖5-2 播放界面</b></p><p><b>  5.3 暫停</b></p><p>

112、;  在音樂播放的過程中,為了方便,我們需要對音樂播放進行控制,所以設(shè)置了“暫停”功能。點擊該功能按鈕,音樂播放暫時停止;再次點擊,音樂才能繼續(xù)播放。具體的代碼如下:</p><p>  protected void pause() </p><p><b>  {</b></p><p>  flag = PAUSE;</p>

113、<p>  playbtn.setImageResource(R.drawable.play_button);</p><p>  Intent intent = new Intent();</p><p>  intent.setAction("org.music.service.LocalMusicService");</p><p&g

114、t;  intent.putExtra("op", PAUSE);</p><p>  startService(intent);</p><p><b>  }</b></p><p><b>  5.4 上一首</b></p><p>  在音樂播放過程中,隨著我們的意愿變

115、動,我們有時會需要切換播放歌曲,所以設(shè)置了“上一首”這一功能。點擊該功能按鈕,播放器會自動切換到音樂列表中的上一個音樂文件進行播放,這能大大的方便我們對音樂的控制。具體的代碼如下:</p><p>  protected void latestOne() </p><p><b>  {</b></p><p>  if (position =

116、= 0)</p><p><b>  {</b></p><p>  position = _ids.length - 1;</p><p>  } else if (position > 0) </p><p><b>  {</b></p><p>  positi

117、on--;</p><p><b>  }</b></p><p><b>  stop();</b></p><p><b>  setup();</b></p><p><b>  play();</b></p><p><

118、;b>  }</b></p><p><b>  5.5 停止播放</b></p><p>  在音樂播放過程中,我們經(jīng)常會因為需要而停止播放音樂?!巴V共シ拧惫δ芤虼硕O(shè)計。點擊該功能按鈕,音樂播放會立即停止。具體的代碼如下:</p><p>  private void stop() </p><p&g

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論