摘 "要: 為了開發(fā)出豐富多彩的移動多媒體應(yīng)用程序,借助Android平臺提供的良好API接口,通過程序設(shè)計開發(fā)實現(xiàn)了多媒體應(yīng)用程序——音樂播放器。首先對Android的系統(tǒng)架構(gòu)進(jìn)行了簡要的概述,隨后在此基礎(chǔ)上對Android應(yīng)用程序的特點及開發(fā)組件分別進(jìn)行了介紹,最后通過設(shè)計實現(xiàn)一個音樂播放器對Android多媒體應(yīng)用程序開發(fā)方法進(jìn)行了說明演示。該設(shè)計實現(xiàn)的音樂播放器既可以播放資源文件中的音樂文件,也可以選擇手機(jī)SD卡中的本地音樂文件進(jìn)行播放。
關(guān)鍵詞: Android; 多媒體; 音樂播放器; 程序設(shè)計
中圖分類號: TN919?34; TP311 " " " " " " " " " 文獻(xiàn)標(biāo)識碼: A " " " " " " " " " "文章編號: 1004?373X(2015)02?0032?03
Development on multimedia application based on Android
LI Yang?sheng, LI Jun
(Shaanxi Polytechnic Institute, Xianyang 712000, China)
Abstract: In order to develop a variety of mobile multimedia application program, with a good API interface provided by the Android platform, the multimedia application program (music player) was designed and developed by program design. The Android system architecture is described briefly. on the basis of the characteristics and development components of Android application program are introduced. A music player was realized. The development methods of Android multimedia application program are illustrated. The music player can play both music files in resource files and local music files in SD card in mobile phone.
Keywords: Android; multimedia; music player; program design
Android是Google開發(fā)的基于Linux平臺的開源手機(jī)操作系統(tǒng)。它包括操作系統(tǒng)、中間件、用戶界面和應(yīng)用程序,號稱是首個為移動終端打造的真正開發(fā)和完整的移動軟件。隨著3G技術(shù)的發(fā)展,移動電話正向著智能化的方向邁進(jìn),移動電話已經(jīng)逐漸成為多種工具的功能載體,可以作為通信工具、網(wǎng)絡(luò)工具、媒體播放器、媒體獲取設(shè)備、信息感知終端、可以個性化定制的平臺等[1]。
Android系統(tǒng)誕生在時代的背景下,其全開放的智能移動平臺、多硬件平臺的支持、使用眾多標(biāo)準(zhǔn)化的技術(shù)、核心技術(shù)完整、完善的輔助開發(fā)工具等特點正與智能手機(jī)發(fā)展方向緊密相連,它將代表并引領(lǐng)新時代的技術(shù)潮流。
1 "Android的系統(tǒng)架構(gòu)
Android平臺的系統(tǒng)架構(gòu)如圖1所示,自底向上可以分為4層,分別是Linux內(nèi)核層、Android運行庫層、應(yīng)用框架層、應(yīng)用程序?qū)覽2]。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\01T1.tifgt;
圖1 Android的系統(tǒng)架構(gòu)圖
(1) Linux內(nèi)核層:Android基于Linux 2.6內(nèi)核開發(fā)的,該層用來提供系統(tǒng)的底層服務(wù),包括安全機(jī)制、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)堆棧及一系列的驅(qū)動模塊。作為一虛擬的中間層,該層位于硬件與其他的軟件層之間。
(2) Android運行庫層:Android運行時庫包含一組核心庫(提供了Java語言核心庫內(nèi)的大部分功能)和Dalvik虛擬機(jī)。同時Android提供了豐富的庫類支持且大部分為開源代碼。
(3) 應(yīng)用框架層:這一層是編寫Google發(fā)布的核心應(yīng)用時所使用的API框架,開發(fā)人員同樣可以使用這些框架來開發(fā)自己的應(yīng)用,這樣便簡化了程序開發(fā)的架構(gòu)設(shè)計,但使用方法需遵循框架的安全性約束。
(4) 應(yīng)用程序?qū)樱篈ndroid本身附帶一些核心的應(yīng)用程序,包括E?mail客戶端、短信程序、日歷、地圖、瀏覽器、通訊錄等[3],目前所有的應(yīng)用程序都是由Java語言開發(fā)。
2 "Android的系統(tǒng)特點
對于開發(fā)者而言,Android開發(fā)分為3種類型:
(1) 移植開發(fā)移動電話系統(tǒng)
移植開發(fā)是為了將Android系統(tǒng)在手機(jī)上運行,在具體的硬件系統(tǒng)上構(gòu)建Android軟件系統(tǒng),這種類型的開發(fā)在Android底層進(jìn)行。
(2) Android應(yīng)用程序開發(fā)
應(yīng)用程序開發(fā),是大多數(shù)開發(fā)者從事的開發(fā)工作,可以基于硬件配置,也可以基于Android模擬器,應(yīng)用開發(fā)在Android系統(tǒng)的最上層。
(3) Android系統(tǒng)開發(fā)
系統(tǒng)開發(fā),就是指在需要某種功能而系統(tǒng)并沒有提供,這時就需要從系統(tǒng)底層向上開發(fā)。
Android系統(tǒng)具有以下5個特點:
開放性:Google與開放手機(jī)聯(lián)盟合作開發(fā)了Android,希望在移動產(chǎn)業(yè)內(nèi)形成一個開放式的生態(tài)系統(tǒng)。
無限性:Android上的應(yīng)用程序可以通過標(biāo)準(zhǔn)API訪問核心移動設(shè)備功能,通過互聯(lián)網(wǎng)可以聲明它們的功能可以供其他應(yīng)用程序使用。
平等性:移動設(shè)備上的應(yīng)用程序可以被替換或擴(kuò)展,即使一些核心組件也是如此。
嵌入性:應(yīng)用程序可以輕松地嵌入HTML、JavaScript和CSS,還可以通過WebVIEW顯示網(wǎng)絡(luò)內(nèi)容。
并行性:Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其中并行運行。
3 "Android程序開發(fā)的基本組件
Android應(yīng)用程序一般由以下6個組件提供基本的結(jié)構(gòu)模塊[4?5]:
(1) Activity:應(yīng)用程序的表示層,相當(dāng)于其他類似的桌面程序設(shè)計中的Form的概念。
(2) Service:應(yīng)用程序中不可見部分,Service在后臺工作,它們被用來執(zhí)行一些需要持續(xù)執(zhí)行的常規(guī)處理。
(3) Content Provider:一個可以共享的數(shù)據(jù)庫。Android系統(tǒng)中包含多個本地Content Provider來提供有用的數(shù)據(jù)庫供訪問。
(4) Intent:一個簡單的消息傳遞框架。應(yīng)用程序通過Intent發(fā)出請求,表明希望執(zhí)行某個動作的意圖,最后系統(tǒng)就會確定一個最適合執(zhí)行動作的目標(biāo)。
(5) Broadcast Receiver:Intent廣播的消費者。Broadcast Receiver會自動啟動應(yīng)用程序來響應(yīng)某個到來的Intent,這個特點使它成為了事件驅(qū)動程序的最佳選擇。
(6) Notification:一種用戶通知框架。通知允許向用戶發(fā)送信號,而不會中斷他們當(dāng)前的活動,它是Service或者Broadcast Receiver引起用戶注意的最佳方法。
在Android中,這些組件之間的依賴性是很低的,可以理解為面向?qū)ο笤O(shè)計中模塊間的低耦合設(shè)計,這樣做的目的是可以和其他應(yīng)用程序共享。
4 "Android系統(tǒng)中音樂播放器的實現(xiàn)
Android提供了常見媒體的編碼、解碼機(jī)制,可以通過調(diào)用Android提供的現(xiàn)有API,實現(xiàn)音視頻播放器、錄音和拍照等應(yīng)用程序。在Android上實現(xiàn)音樂的播放,主要是使用MediaPlayer類[6]。MediaPlayer類包含了Audio和Video的播放功能,它可以獲得媒體文件的各種屬性和當(dāng)前的播放狀態(tài),也可以開始和停止文件的播放。
4.1 "布局設(shè)計
Android是通過布局來定義UI(用戶界面)的,一般視圖可以直接在布局的XML里聲明。音樂播放器的主界面的布局定義main.xml文件如代碼所示:
lt;?xml version=\"1.0\" encoding=\"UTF?8\"?gt;
?lt;LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:layout_height=\"fill_parent\"
android:layout_width=\"fill_parent\"
android:orientation=\"vertical\"
gt;
lt;TextView
android:layout_height=\"wrap_content\"
android:layout_width=\"fill_parent\"
android:text=\"@string/hello\"
/gt;
lt;Button android:
layout_height=\"wrap_content\"
android:layout_width=\"fill_parent\"
android:text=\"簡易MP3播放器\"
android:clickable=\"1\"
android:textSize=\"24px\"
/gt;
lt;TextView
android:layout_height=\"wrap_content\"
android:layout_width=\"wrap_content\"
android:text=\"播放應(yīng)用程序資源:\"
android:textSize=\"24px\"
/gt;
?lt;LinearLayout
android:layout_height=\"wrap_content\"
android:layout_width=\"fill_parent\"
android:gravity=\"right\"gt;
lt;ImageButton
android:layout_height=\"wrap_content\"
android:layout_width=\"wrap_content\"
android:id=\"@+id/play1\"
android:src=\"@drawable/play\"
/gt;
其余Button代碼與此類似,此處省略部分代碼
lt;/LinearLayoutgt;
lt;/LinearLayoutgt;
4.2 "程序設(shè)計框架
在Activity類的界面生成消息響應(yīng)方法中,先定義了幾個操作按鈕,然后就創(chuàng)建了整個程序的2個主要對象:mediaPlayer1(播放資源文件中的音樂文件)和mediaPlayer2(播放手機(jī)SD卡中的音樂文件),并對它們分別進(jìn)行了初始化。在程序中對按鈕進(jìn)行事件監(jiān)聽,通過調(diào)用MediaPlayer對象的prepare( )和start( )方法開始播放音樂;通過調(diào)用pause( )和stop( )方法進(jìn)行音樂的暫停、停止[7]。在選擇手機(jī)SD卡中的音樂文件播放時,對mediaPlayer2的初始化就不能像mediaPlayer1那樣使用MediaPlayer.create( )方法來創(chuàng)建,而是需要使用new來操作符創(chuàng)建。在創(chuàng)建好mediaPlay2對象之后,需要依次調(diào)用setDataSource( )和prepare( )方法,來設(shè)置數(shù)據(jù)源,讓播放器完成準(zhǔn)備工作。如果在prepare( )方法調(diào)用過程中出現(xiàn)錯誤,就會拋出IOException異常。
4.3 "程序核心代碼
對MediaPlayer對象的初始化代碼如下:
//MediaPlayer 對象的初始化
private void mediaPlayer1init(){ " //播放資源文件中的音樂文件
try{ mediaPlayer1=MediaPlayer.create(this, R.raw.temp);
mediaPlayer1.setOnCompletionListener(this);
} catch (Throwable t){errorReport(t);}
}
private void mediaPlayer2init(){ " " "http://播放手機(jī)SD卡中的音樂文件
try { mediaPlayer2 = new MediaPlayer();
String path = \"/sdcard/Yesterday Once More.mp3\";
mediaPlayer2.setDataSource(path);
mediaPlayer2.prepare();
mediaPlayer2.setOnCompletionListener(this);
}
catch (IllegalArgumentException e) {e.printStackTrace();}
catch (IllegalStateException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
catch (Throwable t){errorReport(t);}
}
對文件格式錯誤等的錯誤處理如下所述:
private void errorReport(Throwable t){
AlertDialog.Builder adBuilder1=new AlertDialog.Builder(this);
adBuilder1.setTitle(\"ERROR!\").setMessage(t.toString()). setPositiveButton(\"確定\", " 1).show();
}
對play按鈕進(jìn)行事件監(jiān)聽如下所示:
play1.setOnClickListener
(new View.OnClickListener() {
public void onClick(View v)
{ "ib1play();
}
});
private void ib1play(){
flag1=1;
mediaPlayer1.start();
pause.setEnabled(true);
stop.setEnabled(true);
}
在onCompletion()方法中,使用flag1,flag2來標(biāo)志兩個MediaPlayer對象的工作狀態(tài)。
重寫onCompletion() 方法:
public void onCompletion(MediaPlayer mp) {
//循環(huán)播放
if(flag1==1) "ib1play();
if(flag2==1) "ib4play();
}
這里只寫出了部分核心代碼,其他按鈕的方法與play1的方法類似,此處不再贅述。
4.4 "程序運行界面
簡易MP3播放器運行界面如圖2所示。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\01T2.tifgt;
圖2 簡易MP3播放器運行界面
5 "結(jié) "語
本文對Android的系統(tǒng)架構(gòu)進(jìn)行了概述,并在此基礎(chǔ)上對Android應(yīng)用程序的特點及開發(fā)組件分別進(jìn)行了介紹,最后設(shè)計實現(xiàn)了一個簡易的音樂播放器,從而說明了Android多媒體程序的開發(fā)過程。Android具有極大的開放性和兼容性,隨著Android手機(jī)的普及,Android應(yīng)用的需求勢必會越來越大,這將會是一個潛力巨大的市場,會吸引無數(shù)軟件開發(fā)商和開發(fā)者投身其中。
參考文獻(xiàn)
[1] 汪永松.Android平臺開發(fā)之旅[M].北京:機(jī)械工業(yè)出版社,2010.
[2] 溫濤.東軟Android工程師實訓(xùn)技術(shù)教程[M].大連:東軟電子出版社,2011.
[3] 唐敏.基于Android平臺的通訊幫手的設(shè)計與開發(fā)[J].計算機(jī)科學(xué),2012(z1):583?586.
[4] 李楊,馮剛,李亮,等.基于Android的多媒體應(yīng)用開發(fā)與研究[J].計算機(jī)與現(xiàn)代化,2011(4):153?156.
[5] 林福炎.基于Android平臺的在線音樂客戶端設(shè)計與實現(xiàn)[D].北京:中國地質(zhì)大學(xué),2011.
[6] 張永久.基于Android系統(tǒng)的MP5播放器的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[7] 白璐,李國民.Android系統(tǒng)WMA文件播放功能的設(shè)計與實現(xiàn)[J].電子科技,2011(9):158?161.