2007 年11 月由Google 牽頭,有30 多家移動技術和無線應用領域領先企業組成的開放手機聯盟( Open Handset Alliance) 發布了其智能手機平臺---Android.Android 是一個開放、自由的移動終端平臺,它是由操作系統、中間件、用戶界面、應用軟件組成,同時其開放性保證該平臺不存在任何阻礙移動產業創新的專有權障礙。開發人員在該平臺開發的應用程序是使用Java 語言編寫的,在Dalvik 虛擬機上運行的。Android 的底層是以開放性的Linux Kernel為其架構,也可以理解為Google 推出的手機操作系統和相關軟件的總稱。
Android 是一套真正意義上的開放性移動設備綜合平臺,它包括操作系統、中間件和一些關鍵的平臺應用。Android 最大特點在于它是一個開放的體系架構,具有非常好的開發和調試環境,而且還支持各種可擴展的用戶體驗,Android 里面具有非常豐富的圖形系統、對多媒體的支持功能和非常強大的瀏覽器.
Android 平臺的開放性等特點既能促進技術( 包括平臺自身) 的創新,又有助于降低開發成本,還可以使運營商能非常方便地制定特色化的產品,因此,它具有很大的市場發展潛力。
1 Android 軟件平臺的構成
Android 軟件平臺主要由5 部分構成,它們分別是: 關鍵應用程序、應用程序框架和組件、C /C ++ 函數庫、Java 程序運行環境、優化了的Linux 內核。
(1) 關鍵應用程序。
Android 本身會附帶一些核心的應用程序,包括E-mail 客戶端、短信程序、日歷、地圖、瀏覽器、通訊錄等,目前所有的應用程序都是用Java 語言開發的。
更多有特色的Android 應用程序還有待于廣大開發者共同參與開發。
(2) 應用程序框架及組件。
Android 應用程序開發基于框架和組件。Android 本身已在其框架中提供了許多組件供應用程序調用,開發者也可在開發應用程序時順帶開發新的組件,并將該組件放入應用程序框架中,以供自己和其它應用程序調用。
(3) Android 運行時庫和其它庫層。
Android 應用程序框架之下是一套C /C ++ 函數庫,它們服務于Android 應用程序組件,其功能通過組件間接提供給開發者。這些函數庫包括: 標準C函數庫、多媒體庫、瀏覽器引擎( 集成了Web 瀏覽器和Internet 安全的SSL 和WebKit) 、2D、3D 圖形庫及SQLite 引擎和外觀管理器等。這一層也提供了程序運行的環境。Android 的Java 程序運行環境包含一組Java 核心函數庫及Dalvik 虛擬機,它們有效地優化了Java 程序的運行過程。
(4) Linux 內核。
Android 系統平臺基于優化了的Linux 內核,它提供諸如硬件驅動程序( USB、藍牙、顯示屏等) 、內存管理、進程管理、電源管理等服務,同時也是手機軟、硬件的連接層。
2 Android 程序開發的基本組件
Android 有如下幾大基本組件: Activity、Service、Content Provider 和Broadcast Receiver。
Activity 是Android 最基本的應用程序組件。任何一個Android 應用程序都可以看作一組任務,這里每一個任務就可以稱作一個Activity.在應用程序中,一個Activity 通常就是一個單獨的屏幕,用于呈現數據和與用戶進行交互,每個屏幕可以有一個或多個組件布局。
而每一個活動又是一個單獨的類,每一個這樣的類都要將Activity 作為父類。一個Activity 可以切換到新的Activity,也可以返回前一個Activity.Android 通過使用Intent 類來實現Activity 的切換。例如,一個簡單的游戲程序可以分為5 個Activity: 啟動畫面、主菜單界面、游戲主界面、高分辨和幫助界面。
Service,即"服務"的意思,相當于沒有界面的Activity.應用程序的Service 可以不需要用戶直接參與而長時間運行。典型的例子就是音樂播放器。在一個音樂播放器程序中有多個Activity,它們分別實現了歌曲的選擇和播放等功能。然而,音樂重放這個功能并沒有對應的Activity,它通過Service 來實現。
音樂播放器程序啟動一個Service,它可以在后臺保持音樂的不斷播放。應用程序還可以連接到一個Service.當Service 啟動后,還可以借助Service 提供的接口與它進行通信。
Android 應用程序可以使用文件、SQL 數據庫等各種存儲系統來保存數據。但是,如果想實現不同應用之間的數據共享,就需要用到Content Provider.
Content Provider 提供了一套標準的訪問接口,以方便其他應用程序對數據進行訪問、操作。
在實際應用中,常常需要等待系統或者其它應用發出一道指令。在Android 中,充分考慮了這類需求,于是就有了Broadcast Receiver 這樣的一個組件。
每個Broadcast Receiver 都可以接收一種或若干種Intent作為觸發事件,當一個Broadcast Receiver 被觸發后,系統就會通知相應的程序。
3 Android 多媒體API 及開發方法
多媒體---無論是圖像、視頻還是聲音,都早已成為了移動設備受到廣泛歡迎的主要原因。而今,手機設備很少會沒有攝像頭的,而且隨著技術的日益更新,越來越多的設備會擁有更為專業的視頻性能。用戶經常使用手機來拍攝和瀏覽照片,錄制聲音和觀看視頻。
3. 1 Android 提供的多媒體開發框架
Android 軟件開發包提供了一系列的方法來處理音視頻媒體,包括對于多種媒體類型和格式的支持。
單獨的Android 設備和開發人員可以擴展其支持的媒體格式列表。
Open Core 是Android 多媒體開發的核心,所有Android 平臺的音頻、視頻的采集以及播放等操作都是通過它來實現的。程序員可以通過Open Core 方便快速地開發出想要的多媒體應用程序,例如: 錄音、播放、回放、視頻會議等。Open Core 和框架圖如圖1 所示。
圖1 Open Core 框架圖
由圖1 可以看出,Open Core 支持的格式有MPEG4、H. 263、MP3、AAC、JPG 等。Open Core 多媒體框架有一套通用可擴展的接口,針對第三方的多媒體編解碼器,輸入、輸出設備等。
3. 2 Open Core 的主要多媒體類與接口
Open Core 主要提供了如下幾個多媒體類:
( 1) MediaPlayer 類可以用于播放音頻、視頻和流媒體,它包含了Audio 和Video 的播放功能,在Android的界面上,音頻和視頻的播放都是調用Media-Player 實現的。它可以獲得媒體文件和各種屬性和當前的播放狀態,并可以開始和停止文件的播放。
( 2) MediaRecorder 類用來進行媒體采樣,包括音頻和視頻。MediaRecorder 作為狀態機運行,需要設置不同的參數,如源格式和源設備。設置后可執行任意長度的錄制,直到用戶停止。
( 3) VideoView 類主要用來顯示一個視頻文件,它是SurfaceView 類的一個子類,且實現了MediaPlayerControl接口。
( 4) Camera 類用來處理系統中與相機相關的事件,Camera 是一個專門用來連接和斷開相機服務的類。
Open Core 在使用過程中的調用關系如圖2所示。
圖2 使用Open Core 的調用關系圖
4 示例程序: 播放器
4. 1 布局設計
Android 是通過布局( Layout) 來定義UI( 用戶界面) 的。一般視圖( View) 可以直接在布局的XML 里聲明。XML 文件如下所示:
< ? xml version = ″1. 0″encoding = ″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 個BUTTON 同上,橫坐標有變化。)
< /AbsoluteLayout >
這個簡單的播放器只有一個界面,可以顯示播放列表和對音樂的播放進行各種操作。
4. 2 程序框架設計
在這唯一的Activity 類的界面生成消息響應方法中,先定義幾個操作按鈕,然后就要創建整個程序的主對象---mMediaPlayer 了。語句如下:
public MediaPlayer mMediaPlayer = null;
這是一個MediaPlayer 類型的對象,它的功能前面已經介紹過了,這里不再贅述。之后要創建的就是其它的組件,包括播放列表、歌曲的路徑以及索引了。
private List < String > mMusicList = new ArrayList < String >( ) ; / /播放列表
private int currentListItme = 0; / /索引
private static final String MUSIC_PATH = new String( ″ /sdcard/″) ; / /歌曲的路徑
4. 3 程序核心代碼
接下來設置這些ImageButton 的事件監聽。
mStartImageButton. setOnClickListener(
new ImageButton. OnClickListener( )
{
@ Override public void onClick( View v)
{
playMusic( MUSIC_PATH + mMusi-cList. get( currentListItme)
) ;
}
} ) ;
這是"開始播放"按鈕的事件監聽。這里是調用了一個playMusic( ) 方法來實現音樂文件的播放的。
在playMusic( ) 方法中,先調用mMediaPlayer 的reset( ) 方法,重置MediaPlayer 到它的正常狀態。然后調用setDataSource( string) 方法設置好音樂文件的數據源,再連續調用prepare( ) 和start( ) 方法,MediaPlayer將開始播放音樂文件。
接下來,要設置一個OnCompletionListener ( setOnCompletionListener( new OnCompletionListener ) ) ,在歌曲結束的時候,onCompletion( MediaPlayer) 會被調用,這樣就可以設置為自動播放下一曲目。代碼如下。
mMediaPlayer. setOnCompletionListener(
new OnCompletionListener( )
{
public void onCompletion( MediaPlayer arg0)
{
nextMusic( ) ; / /播放下一曲
}
} ) ;
其它方法與上面方法類似,在"停止"按鈕的事件響應方法里,要調用mMediaPlayer 的isPlaying( ) 方法來判斷播放器是否正在播放,如果正在播放則調用reset( ) 方法直接重置播放器即可。暫停則可以調用mMediaPlayer 的pause( ) 方法,再次開始播放則調用start( )。
5 結束語
Android 手機應用程序開發需要著眼于它的整個體系構架,這是一項復雜的工程。本文先是介紹并分析了Android 系統的層次架構,并在此基礎上介紹了Android 應用程序開發的相關技術和基本的開發流程。接下來介紹了Android 為開發人員提供的簡單、易用的多媒體開發組件MediaPlayer、MediaRecorder等類。最后用具體的應用程序簡要說明了Android多媒體應用程序的開發方法。Android 具有極大的開放性和兼容性,相信廣大開發者可以借助AndroidSDK 提供的強大技術支持,開發出豐富多彩、極具個性的移動應用。
-
Android
+關注
關注
12文章
3959瀏覽量
129189 -
多媒體
+關注
關注
0文章
508瀏覽量
37435 -
應用程序
+關注
關注
38文章
3316瀏覽量
58520
發布評論請先 登錄
相關推薦
軟件開發(手機開發 網絡多媒體 linux開發 android開發
推薦一本書《android應用程序開發與典型案例》完整版PDF下載
Android程序的執行流程分析
Android多媒體程序開發教程

基于Android平臺的多媒體播放器解決方案分析

用于移動應用程序的多媒體處理器 EMMA Mobile1for UART 接口

用于移動應用程序的多媒體處理器 EMMA Mobile1for Image Composer

用于移動應用程序的多媒體處理器 EMMA Mobile1for MICROWIRE

用于移動應用程序的多媒體處理器 EMMA Mobile1for Camera Interface

評論