Android多媒體開發--資源文件播放
播放音頻文件。按照音頻文件來源不同可以分為:資源文件播放、係統播放文件和網絡文件播放。資源文件播放是放在“<工程>/res/raw”,然後發布的時候被打成APK包一起安裝在手機上。很顯然這種方式不適合用於播放娛樂為主的多媒體文件,由於娛樂的多媒體文件是經常更新的,而放置在這個raw下麵的文件用戶是沒有權限更新的,因此這種方式一般用於應用自己的一些音頻和視頻播放,如按鍵音、開機啟動音、信息提示音等應用使用的聲音。
下麵看看播放資源音頻文件的代碼請參考代碼清單12-1,完整代碼請參考Chapter12_1工程中AudioPlayer代碼部分。
【代碼清單12-1】
public class AudioPlayer extends Activity {
private ImageButton play;
private ImageButton stop;
private MediaPlayer mMediaPlayer;
private int state = IDLE;
private static final int PLAYING = 0;
private static final int PAUSE = 1;
private static final int STOP = 2;
private static final int IDLE = 3;
public static final int UPDATE = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio_player);
// 初始化播放按鈕
play = (ImageButton) findViewById(R.id.play);
play.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (state == PLAYING) {
pause();
} else {
start();
}
}
});
// 初始化停止按鈕
stop = (ImageButton) findViewById(R.id.stop);
stop.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
stop();
}
});
// 開始播放歌曲
play();
}
private void pause() {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
state = PAUSE;
}
play.setImageResource(R.drawable.play);
}
private void start() {
if (state == STOP) {
play();
} else if (state == PAUSE) {
mMediaPlayer.start();
state = PLAYING;
}
play.setImageResource(R.drawable.pause);
}
private void stop() {
mMediaPlayer.stop();
state = STOP;
play.setImageResource(R.drawable.play);
}
// MediaPlayer進入prepared狀態開始播放
private OnPreparedListener preListener = new OnPreparedListener() {
public void onPrepared(MediaPlayer arg0) {
mMediaPlayer.start();
state = PLAYING;
}
};
private void play() {
try {
if (mMediaPlayer == null || state == STOP) {
// 創建MediaPlayer對象並設置Listener
mMediaPlayer = MediaPlayer.create(this, R.raw.ma_mma);
mMediaPlayer.setOnPreparedListener(preListener);
} else {
// 複用MediaPlayer對象
mMediaPlayer.reset();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上麵的代碼隻是實現了播放、暫停、停止功能,下一首、上一首和進度控製條的功能沒有實現。文件放在raw目錄下麵調用play()方法實現了播放功能,mMediaPlayer = MediaPlayer.create(this, R.raw.ma_mma)是創建MediaPlayer,通過mMediaPlayer.setOnPreparedListener(preListener)設置了OnPreparedListener監聽器,它是監聽文件預處理完成之後事件。
private void play() {
try {
if (mMediaPlayer == null || state == STOP) {
// 創建MediaPlayer對象並設置Listener
mMediaPlayer = MediaPlayer.create(this, R.raw.ma_mma);
mMediaPlayer.setOnPreparedListener(preListener);
} else {
// 複用MediaPlayer對象
mMediaPlayer.reset();
}
} catch (Exception e) {
e.printStackTrace();
}
}
預處理完成之後MediaPlayer進入prepared狀態,調用start()方法是播放媒體文件方法,同時把播放標誌設置為PLAYING狀態。
private OnPreparedListener preListener = new OnPreparedListener() {
public void onPrepared(MediaPlayer arg0) {
mMediaPlayer.start();
state = PLAYING;
}
};
播放流程如圖12-5所示。

圖12-5播放流程
下麵是暫停功能播放實現,MediaPlayer的pause()方法實現了媒體暫停,並把標誌設定為PAUSE。
private void pause() {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
state = PAUSE;
}
play.setImageResource(R.drawable.play);
}
下麵是停止功能播放實現,MediaPlayer的stop()方法實現了媒體停止,並把標誌設定為STOP。
private void stop() {
mMediaPlayer.stop();
state = STOP;
play.setImageResource(R.drawable.play);
}
出自《Andorid開發案例驅動教程》
最後更新:2017-04-02 06:51:43