android的響鈴MediaPlayer

來源:互聯網
上載者:User
前言  學習android一段時間了,為了進一步瞭解android的應用是如何設計開發的,決定詳細研究幾個開源的android應用。從一些開源應用中吸收點東西,一邊進行量的積累,一邊探索android的學習研究方向。這裡我首先選擇了jwood的 Standup Timer 項目。本文將把研究的內容筆記整理,建立一個索引列表。 MediaPlayer  在standup timer中需要用到多媒體的鈴聲提醒,它是採用MediaPlayer類進行具體操作。android 中mediaPlayer主要用於對多媒體:audio/video 音頻和視頻的控制。關於Mediaplayer的詳細介紹可以參考SDK上的詳細說明和使用。MediaPlayer有著各種不同的狀態,狀態間的轉換是通過建立MediaPlayer執行個體或調用各種方法實現的。需要注意的是在有些狀態下,某些方法成員是不能被調用的,否則將拋出異常。
  1. 當MediaPlayer 的執行個體被建立或運行了reset()方法重設後,它就處於Idle 的閑置(?)狀態。在此狀態下,大多數MediaPlayer的方法不能被調用,例如:getCurrentPosition()getDuration()getVideoHeight()getVideoWidth()setAudioStreamType(int)setLooping(boolean)setVolume(float, float)pause()start()stop()seekTo(int),prepare() or prepareAsync()。如果調用會拋出異常。
  2. 一旦調用release()方法,MediaPlayer將處於 End狀態
  3. 通過設定MediaPlayer資料來源的方法 setDataSource(),完成MediaPlayer執行個體的初始化。
  4. 初始化後,必須使Mediaplayer進入perpared(準備就緒)狀態,才可以進入我們熟悉的開始播放、暫停、停止等狀態。進入準備狀態有兩種方式:同步 prepare()或者非同步 prepareAsync() 
  5. 進入Perpared狀態後,調用start()方法將進入Started播放狀態。在播放過程中調用對應的方法可以進入 Paused狀態 和Stopped狀態,且可以通過start()、pause()、Stop()方法相互切換(注意在Stopped狀態下,不直接能進入Started狀態,但可以通過Prepared狀態來間接進入)。
  6. 如果資源檔播放完成,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學習筆記索引  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.