播放音頻檔案。按照音頻檔案來源不同可以分為:資源檔案播放、系統播放檔案和網絡檔案播放。
資源檔案播放是放在“<工程>/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所示。
圖12-5播放流程
下面是暫停功能播放實作,mediaplayer的pause()方法實作了媒體暫停,并把标志設定為pause。
下面是停止功能播放實作,mediaplayer的stop()方法實作了媒體停止,并把标志設定為stop。
出自《andorid開發案例驅動教程》