package com.android.test;
import java.io.File;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
public class ShenMediaPlayerDemo extends Activity {
private Button mb1, mb2, mb3;
private TextView tv;
private MediaPlayer mp; // 聲明一個變量判斷是否爲暫停,默認爲false
private boolean isPaused = false;
private String sdFile;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 通過findViewById找到資源
mb1 = (Button) findViewById(R.id.myButton1);
mb2 = (Button) findViewById(R.id.myButton2);
mb3 = (Button) findViewById(R.id.myButton3);
tv = (TextView) findViewById(R.id.myTextView1);
// 創建MediaPlayer對象,將raw文件夾下的test_cbr.mp3
// mp = MediaPlayer.create(this, R.raw.test_cbr);
// 如果直接讀取資源raw之中,則無需
// mp.setDataSource(sdFile + File.separator+ "music/test.mp3");
// mp.prepare();
// mp3等音樂放在SDCard中 sdcard文件夾之中
sdFile = getSDPath();//
this.mp = new MediaPlayer();
// 增加播放音樂按鈕的事件
mb1.setOnClickListener(new ImageButton.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (mp != null && mp.isPlaying()) {//正在播放,則start無效,不會重新開始
return;
}
mp.reset();
mp.setDataSource(sdFile + File.separator
+ "sdcard/test.mp3");
mp.prepare();
mp.start();
tv.setText("音樂播放中...");
} catch (Exception e) {
tv.setText("播放MP3異常");
e.printStackTrace();
}
}
});
mb2.setOnClickListener(new ImageButton.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (mp != null&&mp.isPlaying()) {//正在播放,則stop有效,並且可以繼續start
mp.stop();
tv.setText("音樂停止播放...");
}
} catch (Exception e) {
tv.setText("停止異常");
e.printStackTrace();
}
}
});
mb3.setOnClickListener(new ImageButton.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (mp != null) {
if (isPaused == false&&mp.isPlaying()) {
mp.pause();
isPaused = true;
tv.setText("暫停播放!");
} else if (isPaused == true&&!mp.isPlaying()) {
mp.start();
isPaused = false;
tv.setText("重新播發!");
}
}
} catch (Exception e) {
tv.setText("暫停異常");
e.printStackTrace();
}
}
});
/* 當MediaPlayer.OnCompletionLister會運行的Listener */
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
// @Override /*覆蓋文件播出完畢事件*/
public void onCompletion(MediaPlayer arg0) {
try {
/*
* 解除資源與MediaPlayer的賦值關係 * 讓資源可以爲其它程序利用
*/
mp.release();
/* 改變TextView爲播放結束 */
tv.setText("音樂播發結束!");
} catch (Exception e) {
tv.setText("onCompletion" + e.toString());
e.printStackTrace();
}
}
});
/* 當MediaPlayer.OnErrorListener會運行的Listener */
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
/* 覆蓋錯誤處理事件 */
public boolean onError(MediaPlayer arg0, int arg1, int arg2) { // TODO
try {
/* 發生錯誤時也解除資源與MediaPlayer的賦值 */
mp.release();
tv.setText("播放過程中出現異常!");
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
});
}
/**
* back按鍵,音樂停止,釋放對象
*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mp.stop();
mp.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* 獲取SD卡路徑,不建議寫死路徑
*
* @return eg:"/mnt/sdcard"
*/
public String getSDPath() {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED); // 判斷sd卡是否存在
if (sdCardExist) {
sdDir = Environment.getExternalStorageDirectory();// 獲取跟目錄
return sdDir.toString();
} else {
return null;
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/myTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start" />
<Button
android:id="@+id/myButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pause" />
<Button
android:id="@+id/myButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop"/>
</LinearLayout>