前言 學習android一段時間了,為了進一步瞭解android的應用是如何設計開發的,決定詳細研究幾個開源的android應用。從一些開源應用中吸收點東西,一邊進行量的積累,一邊探索android的學習研究方向。這裡我首先選擇了jwood的 Standup Timer 項目。本文將把研究的內容筆記整理,建立一個索引列表。 MediaPlayer 在standup timer中需要用到多媒體的鈴聲提醒,它是採用MediaPlayer類進行具體操作。android 中mediaPlayer主要用於對多媒體:audio/video 音頻和視頻的控制。關於Mediaplayer的詳細介紹可以參考SDK上的詳細說明和使用。MediaPlayer有著各種不同的狀態,狀態間的轉換是通過建立MediaPlayer執行個體或調用各種方法實現的。需要注意的是在有些狀態下,某些方法成員是不能被調用的,否則將拋出異常。
- 當MediaPlayer 的執行個體被建立或運行了reset()方法重設後,它就處於Idle 的閑置(?)狀態。在此狀態下,大多數MediaPlayer的方法不能被調用,例如:
getCurrentPosition()
, getDuration()
, getVideoHeight()
, getVideoWidth()
, setAudioStreamType(int)
, setLooping(boolean)
, setVolume(float, float)
, pause()
, start()
, stop()
, seekTo(int)
,prepare()
or prepareAsync()。
如果調用會拋出異常。
- 一旦調用release()方法,MediaPlayer將處於 End狀態
- 通過設定MediaPlayer資料來源的方法 setDataSource(),完成MediaPlayer執行個體的初始化。
- 初始化後,必須使Mediaplayer進入perpared(準備就緒)狀態,才可以進入我們熟悉的開始播放、暫停、停止等狀態。進入準備狀態有兩種方式:同步
prepare()
或者非同步 prepareAsync()
- 進入Perpared狀態後,調用start()方法將進入Started播放狀態。在播放過程中調用對應的方法可以進入 Paused狀態 和Stopped狀態,且可以通過start()、pause()、Stop()方法相互切換(注意在Stopped狀態下,不直接能進入Started狀態,但可以通過Prepared狀態來間接進入)。
- 如果資源檔播放完成,MediaPlayer將自動進入PlaybackCompleted。
在Standup Timer 中只是使用MediaPlayer進行簡單的鈴聲提醒,編碼較為簡單。另外我還寫過一個關於Mediaplayer的例子,是一個簡單的音樂播放器——MusicPlayer(有興趣的可以瀏覽一下)。準備資源檔在編碼前,先把音頻檔案匯入到res/raw檔案夾下。初始化Mediaplayer聲明:privatestatic MediaPlayer bell =null;
privatestatic MediaPlayer airhorn =null;
產生執行個體(在Activity的onCreate裡)
代碼
privatevoid initializeSounds() {
if(bell==null)
{
Logger.d("Loading the bell sound"); //使用此方法建立MediaPlayer,PrePare()已經被調用,MediaPlayer進入PrePared狀態
bell= MediaPlayer.create(this, R.raw.bell);
}
if(airhorn==null)
{
Logger.d("Loading the airhorn sound");
airhorn=MediaPlayer.create(this,R.raw.airhorn);
}
}
播放鈴聲 在Standup Timer裡使用了計時器,當達到某時間鈴聲就會觸發MediaPlayer播放預先準備好的鈴聲。計時器 代碼
protectedsynchronizedvoid updateTimerValues()
{
currentIndividualStatusSeconds++;
if (remainingIndividualSeconds >0)
{
remainingIndividualSeconds--;
if (remainingIndividualSeconds == warningTime)
{
Logger.d("Playing the bell sound");
if (SettingActivity.playSounds(this)) {
//如果等於設定的警告時間且設定允許警告則播放警告鈴聲
playWarningSound();
}//if
} else {
if (remainingIndividualSeconds ==0) {
Logger.d("Playing the airhorn sound");
if (SettingActivity.playSounds(this)) {
//如果時間等於零,切允許鈴聲提醒,則播放結束鈴聲
playFinishedSound();
}//if
}//if
}//else
}//if播放鈴聲
privatevoid playWarningSound() {
playSound(bell);
}
protectedvoid playFinishedSound() {
playSound(airhorn);
}
privatevoid playSound(MediaPlayer mp) {
mp.seekTo(0);
mp.start();
}
釋放資源 使用MediaPlayer一定要記得回收資源privatevoid destroySounds() {
bell.stop();
bell.release();
bell =null;
airhorn.stop();
airhorn.release();
airhorn =null;
}
參考文獻 MediaPlayer Audio and Video系列索引
Android 開源項目-StandupTimer學習筆記索引