天天看點

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() {

stop();

// 開始播放歌曲

play();

private void pause() {

if (mmediaplayer.isplaying()) {

mmediaplayer.pause();

state = pause;

play.setimageresource(r.drawable.play);

private void start() {

if (state == stop) {

} else if (state == pause) {

mmediaplayer.start();

state = playing;

play.setimageresource(r.drawable.pause);

private void stop() {

mmediaplayer.stop();

state = stop;

// mediaplayer進入prepared狀态開始播放

private onpreparedlistener prelistener = new onpreparedlistener() {

public void onprepared(mediaplayer arg0) {

};

private void play() {

try {

if (mmediaplayer == null || state == stop) {

// 建立mediaplayer對象并設定listener

mmediaplayer = mediaplayer.create(this, r.raw.ma_mma);

mmediaplayer.setonpreparedlistener(prelistener);

// 複用mediaplayer對象

mmediaplayer.reset();

} catch (exception e) {

e.printstacktrace();

上面的代碼隻是實作了播放、暫停、停止功能,下一首、上一首和進度控制條的功能沒有實作。檔案放在raw目錄下面調用play()方法實作了播放功能,mmediaplayer = mediaplayer.create(this, r.raw.ma_mma)是建立mediaplayer,通過mmediaplayer.setonpreparedlistener(prelistener)設定了onpreparedlistener監聽器,它是監聽檔案預處理完成之後事件。

預處理完成之後mediaplayer進入prepared狀态,調用start()方法是播放媒體檔案方法,同時把播放标志設定為playing狀态。

播放流程如圖12-5所示。

Android多媒體開發--資源檔案播放

圖12-5播放流程

下面是暫停功能播放實作,mediaplayer的pause()方法實作了媒體暫停,并把标志設定為pause。

下面是停止功能播放實作,mediaplayer的stop()方法實作了媒體停止,并把标志設定為stop。

                                  出自《andorid開發案例驅動教程》

繼續閱讀