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>