android: 播放音頻

在 Android 中播放音頻文件通常都是使用 MediaPlayer 類來實現的,它對多種格式的音 頻文件提供了很是全面的控制方法,從而使得播放音樂的工做變得十分簡單。下表列出了 MediaPlayer 類中一些較爲經常使用的控制方法。android

 

方法名ide

功能描述佈局

setDataSource()學習

設置要播放的音頻文件的位置。this

prepare()spa

在開始播放以前調用這個方法完成準備工做。xml

start()對象

開始或繼續播放音頻。blog

pause()事件

暫停播放音頻。

reset()

將 MediaPlayer 對象重置到剛剛建立的狀態。

seekTo()

從指定的位置開始播放音頻。

stop()

中止播放音頻。調用這個方法後的 MediaPlayer 對象沒法再播放音頻。

release()

釋放掉與 MediaPlayer 對象相關的資源。

isPlaying()

判斷當前 MediaPlayer 是否正在播放音頻。

getDuration()

獲取載入的音頻文件的時長。

 

簡單瞭解了上述方法後,咱們再來梳理一下 MediaPlayer 的工做流程。首先須要建立出一個 MediaPlayer 對象,而後調用 setDataSource()方法來設置音頻文件的路徑,再調用 prepare()方法使 MediaPlayer 進入到準備狀態,接下來調用 start()方法就能夠開始播放音頻,調用 pause()方法就會暫停播放,調用 reset()方法就會中止播放。 下面就讓咱們經過一個具體的例子來學習一下吧,新建一個 PlayAudioTest 項目,而後

修改 activity_main.xml 中的代碼,以下所示:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >

 

<Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Play" />

 

<Button android:id="@+id/pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Pause" />

 

<Button android:id="@+id/stop" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Stop" />

 

</LinearLayout>

佈局文件中橫向放置了三個按鈕,分別用於對音頻文件進行播放、暫停和中止操做。然 後修改 MainActivity 中的代碼,以下所示:

 

public class MainActivity extends Activity implements OnClickListener {

 

private Button play;

 

private Button pause;

 

private Button stop;

 

 

private MediaPlayer mediaPlayer = new MediaPlayer();

 

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

play = (Button) findViewById(R.id.play);

pause = (Button) findViewById(R.id.pause);

stop = (Button) findViewById(R.id.stop); play.setOnClickListener(this); pause.setOnClickListener(this); stop.setOnClickListener(this);

initMediaPlayer(); // 初始化MediaPlayer

}

 

 

private void initMediaPlayer() {

try {

File file = new File(Environment.getExternalStorageDirectory(), "music.mp3");

mediaPlayer.setDataSource(file.getPath()); // 指定音頻文件的路徑

mediaPlayer.prepare(); // MediaPlayer進入到準備狀態

} catch (Exception e) {

e.printStackTrace();

}

}

 

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.play:

if (!mediaPlayer.isPlaying()) {

mediaPlayer.start(); // 開始播放

}

break;

case R.id.pause:

if (mediaPlayer.isPlaying()) {

mediaPlayer.pause(); // 暫停播放

}

break;

case R.id.stop:

if (mediaPlayer.isPlaying()) {

mediaPlayer.reset(); // 中止播放

initMediaPlayer();

}

break;

default:

break;

}

}

 

@Override

protected void onDestroy() {

super.onDestroy();

if (mediaPlayer != null) {

mediaPlayer.stop();

mediaPlayer.release();

}

}

 

}

能夠看到,在類初始化的時候咱們就建立了一個 MediaPlayer 的實例,而後在 onCreate() 方法中調用了 initMediaPlayer()方法爲 MediaPlayer 對象進行初始化操做。在 initMediaPlayer() 方法中,首先是經過建立一個 File 對象來指定音頻文件的路徑,從這裏能夠看出,咱們須要 事 先 在 SD 卡 的 根 目 錄 下 放 置 一 個 名 爲 music.mp3 的 音 頻 文 件 。 後 面 依 次 調 用 了 setDataSource()方法和 prepare()方法爲 MediaPlayer 作好了播放前的準備。

接下來咱們看一下各個按鈕的點擊事件中的代碼。當點擊 Play 按鈕時會進行判斷,如 果當前 MediaPlayer 沒有正在播放音頻,則調用 start()方法開始播放。當點擊 Pause 按鈕時會 判斷,若是當前 MediaPlayer 正在播放音頻,則調用 pause()方法暫停播放。當點擊 Stop 按鈕 時會判斷,若是當前 MediaPlayer 正在播放音頻,則調用 reset()方法將 MediaPlayer 重置爲剛 剛建立的狀態,而後從新調用一遍 initMediaPlayer()方法。

最後在 onDestroy()方法中,咱們還須要分別調用 stop()和 release()方法,將與 MediaPlayer相關的資源釋放掉。 這樣一個簡易版的音樂播放器就完成了,如今將程序運行到手機上,界面如圖 8.19 所示。

圖   8.19

 

點擊一下 Play 按鈕就能夠聽到優美的音樂了,而後點擊 Pause 按鈕聲音會停住,再次點 擊 Play 按鈕會接着暫停以前的位置繼續播放。這時若是點擊一下 Stop 按鈕聲音也會停住, 可是再次點擊 Play 按鈕時,音樂就會重頭開始播放了。

相關文章
相關標籤/搜索