2007 年11 月由Google 牽頭,有30 多家移動(dòng)技術(shù)和無(wú)線應(yīng)用領(lǐng)域領(lǐng)先企業(yè)組成的開(kāi)放手機(jī)聯(lián)盟( Open Handset Alliance) 發(fā)布了其智能手機(jī)平臺(tái)---Android.Android 是一個(gè)開(kāi)放、自由的移動(dòng)終端平臺(tái),它是由操作系統(tǒng)、中間件、用戶界面、應(yīng)用軟件組成,同時(shí)其開(kāi)放性保證該平臺(tái)不存在任何阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。開(kāi)發(fā)人員在該平臺(tái)開(kāi)發(fā)的應(yīng)用程序是使用Java 語(yǔ)言編寫的,在Dalvik 虛擬機(jī)上運(yùn)行的。Android 的底層是以開(kāi)放性的Linux Kernel為其架構(gòu),也可以理解為Google 推出的手機(jī)操作系統(tǒng)和相關(guān)軟件的總稱。
Android 是一套真正意義上的開(kāi)放性移動(dòng)設(shè)備綜合平臺(tái),它包括操作系統(tǒng)、中間件和一些關(guān)鍵的平臺(tái)應(yīng)用。Android 最大特點(diǎn)在于它是一個(gè)開(kāi)放的體系架構(gòu),具有非常好的開(kāi)發(fā)和調(diào)試環(huán)境,而且還支持各種可擴(kuò)展的用戶體驗(yàn),Android 里面具有非常豐富的圖形系統(tǒng)、對(duì)多媒體的支持功能和非常強(qiáng)大的瀏覽器.
Android 平臺(tái)的開(kāi)放性等特點(diǎn)既能促進(jìn)技術(shù)( 包括平臺(tái)自身) 的創(chuàng)新,又有助于降低開(kāi)發(fā)成本,還可以使運(yùn)營(yíng)商能非常方便地制定特色化的產(chǎn)品,因此,它具有很大的市場(chǎng)發(fā)展?jié)摿Α?/p>
1 Android 軟件平臺(tái)的構(gòu)成
Android 軟件平臺(tái)主要由5 部分構(gòu)成,它們分別是: 關(guān)鍵應(yīng)用程序、應(yīng)用程序框架和組件、C /C ++ 函數(shù)庫(kù)、Java 程序運(yùn)行環(huán)境、優(yōu)化了的Linux 內(nèi)核。
(1) 關(guān)鍵應(yīng)用程序。
Android 本身會(huì)附帶一些核心的應(yīng)用程序,包括E-mail 客戶端、短信程序、日歷、地圖、瀏覽器、通訊錄等,目前所有的應(yīng)用程序都是用Java 語(yǔ)言開(kāi)發(fā)的。
更多有特色的Android 應(yīng)用程序還有待于廣大開(kāi)發(fā)者共同參與開(kāi)發(fā)。
(2) 應(yīng)用程序框架及組件。
Android 應(yīng)用程序開(kāi)發(fā)基于框架和組件。Android 本身已在其框架中提供了許多組件供應(yīng)用程序調(diào)用,開(kāi)發(fā)者也可在開(kāi)發(fā)應(yīng)用程序時(shí)順帶開(kāi)發(fā)新的組件,并將該組件放入應(yīng)用程序框架中,以供自己和其它應(yīng)用程序調(diào)用。
(3) Android 運(yùn)行時(shí)庫(kù)和其它庫(kù)層。
Android 應(yīng)用程序框架之下是一套C /C ++ 函數(shù)庫(kù),它們服務(wù)于Android 應(yīng)用程序組件,其功能通過(guò)組件間接提供給開(kāi)發(fā)者。這些函數(shù)庫(kù)包括: 標(biāo)準(zhǔn)C函數(shù)庫(kù)、多媒體庫(kù)、瀏覽器引擎( 集成了Web 瀏覽器和Internet 安全的SSL 和WebKit) 、2D、3D 圖形庫(kù)及SQLite 引擎和外觀管理器等。這一層也提供了程序運(yùn)行的環(huán)境。Android 的Java 程序運(yùn)行環(huán)境包含一組Java 核心函數(shù)庫(kù)及Dalvik 虛擬機(jī),它們有效地優(yōu)化了Java 程序的運(yùn)行過(guò)程。
(4) Linux 內(nèi)核。
Android 系統(tǒng)平臺(tái)基于優(yōu)化了的Linux 內(nèi)核,它提供諸如硬件驅(qū)動(dòng)程序( USB、藍(lán)牙、顯示屏等) 、內(nèi)存管理、進(jìn)程管理、電源管理等服務(wù),同時(shí)也是手機(jī)軟、硬件的連接層。
2 Android 程序開(kāi)發(fā)的基本組件
Android 有如下幾大基本組件: Activity、Service、Content Provider 和Broadcast Receiver。
Activity 是Android 最基本的應(yīng)用程序組件。任何一個(gè)Android 應(yīng)用程序都可以看作一組任務(wù),這里每一個(gè)任務(wù)就可以稱作一個(gè)Activity.在應(yīng)用程序中,一個(gè)Activity 通常就是一個(gè)單獨(dú)的屏幕,用于呈現(xiàn)數(shù)據(jù)和與用戶進(jìn)行交互,每個(gè)屏幕可以有一個(gè)或多個(gè)組件布局。
而每一個(gè)活動(dòng)又是一個(gè)單獨(dú)的類,每一個(gè)這樣的類都要將Activity 作為父類。一個(gè)Activity 可以切換到新的Activity,也可以返回前一個(gè)Activity.Android 通過(guò)使用Intent 類來(lái)實(shí)現(xiàn)Activity 的切換。例如,一個(gè)簡(jiǎn)單的游戲程序可以分為5 個(gè)Activity: 啟動(dòng)畫面、主菜單界面、游戲主界面、高分辨和幫助界面。
Service,即"服務(wù)"的意思,相當(dāng)于沒(méi)有界面的Activity.應(yīng)用程序的Service 可以不需要用戶直接參與而長(zhǎng)時(shí)間運(yùn)行。典型的例子就是音樂(lè)播放器。在一個(gè)音樂(lè)播放器程序中有多個(gè)Activity,它們分別實(shí)現(xiàn)了歌曲的選擇和播放等功能。然而,音樂(lè)重放這個(gè)功能并沒(méi)有對(duì)應(yīng)的Activity,它通過(guò)Service 來(lái)實(shí)現(xiàn)。
音樂(lè)播放器程序啟動(dòng)一個(gè)Service,它可以在后臺(tái)保持音樂(lè)的不斷播放。應(yīng)用程序還可以連接到一個(gè)Service.當(dāng)Service 啟動(dòng)后,還可以借助Service 提供的接口與它進(jìn)行通信。
Android 應(yīng)用程序可以使用文件、SQL 數(shù)據(jù)庫(kù)等各種存儲(chǔ)系統(tǒng)來(lái)保存數(shù)據(jù)。但是,如果想實(shí)現(xiàn)不同應(yīng)用之間的數(shù)據(jù)共享,就需要用到Content Provider.
Content Provider 提供了一套標(biāo)準(zhǔn)的訪問(wèn)接口,以方便其他應(yīng)用程序?qū)?shù)據(jù)進(jìn)行訪問(wèn)、操作。
在實(shí)際應(yīng)用中,常常需要等待系統(tǒng)或者其它應(yīng)用發(fā)出一道指令。在Android 中,充分考慮了這類需求,于是就有了Broadcast Receiver 這樣的一個(gè)組件。
每個(gè)Broadcast Receiver 都可以接收一種或若干種Intent作為觸發(fā)事件,當(dāng)一個(gè)Broadcast Receiver 被觸發(fā)后,系統(tǒng)就會(huì)通知相應(yīng)的程序。
3 Android 多媒體API 及開(kāi)發(fā)方法
多媒體---無(wú)論是圖像、視頻還是聲音,都早已成為了移動(dòng)設(shè)備受到廣泛歡迎的主要原因。而今,手機(jī)設(shè)備很少會(huì)沒(méi)有攝像頭的,而且隨著技術(shù)的日益更新,越來(lái)越多的設(shè)備會(huì)擁有更為專業(yè)的視頻性能。用戶經(jīng)常使用手機(jī)來(lái)拍攝和瀏覽照片,錄制聲音和觀看視頻。
3. 1 Android 提供的多媒體開(kāi)發(fā)框架
Android 軟件開(kāi)發(fā)包提供了一系列的方法來(lái)處理音視頻媒體,包括對(duì)于多種媒體類型和格式的支持。
單獨(dú)的Android 設(shè)備和開(kāi)發(fā)人員可以擴(kuò)展其支持的媒體格式列表。
Open Core 是Android 多媒體開(kāi)發(fā)的核心,所有Android 平臺(tái)的音頻、視頻的采集以及播放等操作都是通過(guò)它來(lái)實(shí)現(xiàn)的。程序員可以通過(guò)Open Core 方便快速地開(kāi)發(fā)出想要的多媒體應(yīng)用程序,例如: 錄音、播放、回放、視頻會(huì)議等。Open Core 和框架圖如圖1 所示。

圖1 Open Core 框架圖
由圖1 可以看出,Open Core 支持的格式有MPEG4、H. 263、MP3、AAC、JPG 等。Open Core 多媒體框架有一套通用可擴(kuò)展的接口,針對(duì)第三方的多媒體編解碼器,輸入、輸出設(shè)備等。
3. 2 Open Core 的主要多媒體類與接口
Open Core 主要提供了如下幾個(gè)多媒體類:
( 1) MediaPlayer 類可以用于播放音頻、視頻和流媒體,它包含了Audio 和Video 的播放功能,在Android的界面上,音頻和視頻的播放都是調(diào)用Media-Player 實(shí)現(xiàn)的。它可以獲得媒體文件和各種屬性和當(dāng)前的播放狀態(tài),并可以開(kāi)始和停止文件的播放。
( 2) MediaRecorder 類用來(lái)進(jìn)行媒體采樣,包括音頻和視頻。MediaRecorder 作為狀態(tài)機(jī)運(yùn)行,需要設(shè)置不同的參數(shù),如源格式和源設(shè)備。設(shè)置后可執(zhí)行任意長(zhǎng)度的錄制,直到用戶停止。
( 3) VideoView 類主要用來(lái)顯示一個(gè)視頻文件,它是SurfaceView 類的一個(gè)子類,且實(shí)現(xiàn)了MediaPlayerControl接口。
( 4) Camera 類用來(lái)處理系統(tǒng)中與相機(jī)相關(guān)的事件,Camera 是一個(gè)專門用來(lái)連接和斷開(kāi)相機(jī)服務(wù)的類。
Open Core 在使用過(guò)程中的調(diào)用關(guān)系如圖2所示。

圖2 使用Open Core 的調(diào)用關(guān)系圖
4 示例程序: 播放器
4. 1 布局設(shè)計(jì)
Android 是通過(guò)布局( Layout) 來(lái)定義UI( 用戶界面) 的。一般視圖( View) 可以直接在布局的XML 里聲明。XML 文件如下所示:
< ? xml version = ″1. 0″e(cuò)ncoding = ″utf-8?″ >
-< AbsoluteLayout
xmlns: android = ″http: / /schemas. android. com/apk /res /android″
android: orientation = ″vertical″
android: layout_width = ″fill_parent″
android: layout_height = ″fill_parent″ >
< ListView
android: id = ″@ id /android: list″
android: layout_width = ″fill_parent″
android: layout_height = ″fill_parent″
android: layout_weight = ″1″
android: drawSelectorOnTop = ″false″ / >
< ImageButton
android: id = ″@ + id /LastImageButton″
android: layout_width = ″wrap_content″
android: layout_height = ″wrap_content″
android: layout_x = ″10px″
android: layout_y = ″170px″
android: src = ″@ drawable /last″ / >
( 以下4 個(gè)BUTTON 同上,橫坐標(biāo)有變化。)
< /AbsoluteLayout >
這個(gè)簡(jiǎn)單的播放器只有一個(gè)界面,可以顯示播放列表和對(duì)音樂(lè)的播放進(jìn)行各種操作。
4. 2 程序框架設(shè)計(jì)
在這唯一的Activity 類的界面生成消息響應(yīng)方法中,先定義幾個(gè)操作按鈕,然后就要?jiǎng)?chuàng)建整個(gè)程序的主對(duì)象---mMediaPlayer 了。語(yǔ)句如下:
public MediaPlayer mMediaPlayer = null;
這是一個(gè)MediaPlayer 類型的對(duì)象,它的功能前面已經(jīng)介紹過(guò)了,這里不再贅述。之后要?jiǎng)?chuàng)建的就是其它的組件,包括播放列表、歌曲的路徑以及索引了。
private List < String > mMusicList = new ArrayList < String >( ) ; / /播放列表
private int currentListItme = 0; / /索引
private static final String MUSIC_PATH = new String( ″ /sdcard/″) ; / /歌曲的路徑
4. 3 程序核心代碼
接下來(lái)設(shè)置這些ImageButton 的事件監(jiān)聽(tīng)。
mStartImageButton. setOnClickListener(
new ImageButton. OnClickListener( )
{
@ Override public void onClick( View v)
{
playMusic( MUSIC_PATH + mMusi-cList. get( currentListItme)
) ;
}
} ) ;
這是"開(kāi)始播放"按鈕的事件監(jiān)聽(tīng)。這里是調(diào)用了一個(gè)playMusic( ) 方法來(lái)實(shí)現(xiàn)音樂(lè)文件的播放的。
在playMusic( ) 方法中,先調(diào)用mMediaPlayer 的reset( ) 方法,重置MediaPlayer 到它的正常狀態(tài)。然后調(diào)用setDataSource( string) 方法設(shè)置好音樂(lè)文件的數(shù)據(jù)源,再連續(xù)調(diào)用prepare( ) 和start( ) 方法,MediaPlayer將開(kāi)始播放音樂(lè)文件。
接下來(lái),要設(shè)置一個(gè)OnCompletionListener ( setOnCompletionListener( new OnCompletionListener ) ) ,在歌曲結(jié)束的時(shí)候,onCompletion( MediaPlayer) 會(huì)被調(diào)用,這樣就可以設(shè)置為自動(dòng)播放下一曲目。代碼如下。
mMediaPlayer. setOnCompletionListener(
new OnCompletionListener( )
{
public void onCompletion( MediaPlayer arg0)
{
nextMusic( ) ; / /播放下一曲
}
} ) ;
其它方法與上面方法類似,在"停止"按鈕的事件響應(yīng)方法里,要調(diào)用mMediaPlayer 的isPlaying( ) 方法來(lái)判斷播放器是否正在播放,如果正在播放則調(diào)用reset( ) 方法直接重置播放器即可。暫停則可以調(diào)用mMediaPlayer 的pause( ) 方法,再次開(kāi)始播放則調(diào)用start( )。
5 結(jié)束語(yǔ)
Android 手機(jī)應(yīng)用程序開(kāi)發(fā)需要著眼于它的整個(gè)體系構(gòu)架,這是一項(xiàng)復(fù)雜的工程。本文先是介紹并分析了Android 系統(tǒng)的層次架構(gòu),并在此基礎(chǔ)上介紹了Android 應(yīng)用程序開(kāi)發(fā)的相關(guān)技術(shù)和基本的開(kāi)發(fā)流程。接下來(lái)介紹了Android 為開(kāi)發(fā)人員提供的簡(jiǎn)單、易用的多媒體開(kāi)發(fā)組件MediaPlayer、MediaRecorder等類。最后用具體的應(yīng)用程序簡(jiǎn)要說(shuō)明了Android多媒體應(yīng)用程序的開(kāi)發(fā)方法。Android 具有極大的開(kāi)放性和兼容性,相信廣大開(kāi)發(fā)者可以借助AndroidSDK 提供的強(qiáng)大技術(shù)支持,開(kāi)發(fā)出豐富多彩、極具個(gè)性的移動(dòng)應(yīng)用。
-
Android
+關(guān)注
關(guān)注
12文章
4023瀏覽量
133960 -
多媒體
+關(guān)注
關(guān)注
0文章
516瀏覽量
38552 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3344瀏覽量
60243
發(fā)布評(píng)論請(qǐng)先 登錄
多媒體技術(shù)的應(yīng)用與發(fā)展
多媒體應(yīng)用開(kāi)發(fā)
軟件開(kāi)發(fā)(手機(jī)開(kāi)發(fā) 網(wǎng)絡(luò)多媒體 linux開(kāi)發(fā) android開(kāi)發(fā)
推薦一本書《android應(yīng)用程序開(kāi)發(fā)與典型案例》完整版PDF下載
Android程序的執(zhí)行流程分析
ANDROID開(kāi)發(fā)應(yīng)用程序的方法和技巧
Android多媒體程序開(kāi)發(fā)教程
基于Android平臺(tái)的多媒體播放器解決方案分析
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1 for SPI
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1for UART 接口
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1for Image Composer
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1 for Timer
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1for MICROWIRE
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1for Camera Interface
用于移動(dòng)應(yīng)用程序的多媒體處理器 EMMA Mobile1 for PDMA
Android多媒體應(yīng)用程序的開(kāi)發(fā)技術(shù)與流程分析
評(píng)論