MediaPlayer的使用很简单。创建一个实例,然后调用prepare()准备函数,之后就可以播放音乐了
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private final int MEDIAPLAYER_PAUSE = 0;
private final int MEDIAPLAYER_PLAY = 1;
private final int MEDIAPLAYER_STOP = 2;
private int mediastate = 0;
private MediaPlayer mediaPlayer;
private int currentTime;
private int musicMaxTime;
private int currentVol;
private int setTime = 5000;
private AudioManager am;
private Canvas canvas;
private Paint paint;
/*
* public MySurfaceView (Context context){ super(context); sfh =
* this.getHolder(); //为SurfaceView添加状态监听 sfh.addCallback(this); paint = new
* Paint(); paint.setColor(Color.WHITE); setFocusable(true); }
*/
public void surfaceCreated(SurfaceHolder holder) {
mediaPlayer = MediaPlayer.create(context, R.raw.bgmusic);
mediaPlayer.setLooping(true);
musicMaxTime = mediaPlayer.getDuration();
am = (AudioManager) MainActivity.instance
.getSystemService(contect.AUDIO_SERVICE);
MainActivity.instance.setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
// 自定义绘图函数
public void myDraw() {
canvas.drawColor(Color.WHITE);
paint.setColor(Color.RED);
paint.setTextSize(15);
canvas.drawText("当前音量:" + currentVol, 50, 40, paint);
canvas.drawText("当前播放的时间(毫秒)/总时间(毫秒):", 50, 70, paint);
canvas.drawText(currentTime + "/" + musicMaxTime, 100, 100, paint);
canvas.drawText("方向键中间按钮切换 暂停/开始", 50, 130, paint);
canvas.drawText("方向键<--快退" + setTime / 1000 + "秒", 50, 160, paint);
canvas.drawText("方向键-->快退" + setTime / 1000 + "秒", 50, 190, paint);
canvas.drawText("方向键向上增加音量 ", 50, 220, paint);
canvas.drawText("方向键向下减少音量 ", 50, 250, paint);
}
// public boolean onTouchEvent(MotionEvent event){
// tX=(int) event.getX();
// tY=(int) event.getY();
// myDraw();
// return true;
// }
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
try{
switch(mediastate){
case MEDIAPLAYER_PLAY:
mediaPlayer.pause();
mediastate=MEDIAPLAYER_PAUSE;
break;
case MEDIAPLAYER_PAUSE:
mediaPlayer.start();
mediastate = MEDIAPLAYER_PLAY;
break;
case MEDIAPLAYER_STOP:
if(mediaPlayer!=null){
mediaPlayer.pause();
mediaPlayer.stop();
//break;
}
mediaPlayer.prepare();
mediaPlayer.start();
mediastate=MEDIAPLAYER_PLAY;
break;
}
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
am.setStreamVolume(AudioManager.STREAM_MUSIC, currentVol+1, AudioManager.FLAG_PLAY_SOUND);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
am.setStreamVolume(AudioManager.STREAM_MUSIC, currentVol-1, AudioManager.FLAG_PLAY_SOUND);
}
else if(keyCode ==KeyEvent.KEYCODE_DPAD_LEFT){
if(currentTime-setTime<=0){
mediaPlayer.seekTo(0);
}
else mediaPlayer.seekTo(currentTime-setTime);
}
else if(keyCode ==KeyEvent.KEYCODE_DPAD_RIGHT){
if(currentTime-setTime>=musicMaxTime){
mediaPlayer.seekTo(musicMaxTime);
}
else mediaPlayer.seekTo(currentTime+setTime);
}
return super.onKeyDown(keyCode, event);
}
// 游戏逻辑
private void logic() {
if (mediaPlayer != null) {
currentTime = mediaPlayer.getCurrentPosition();
currentVol = am.getStreamVolume(AudioManager.STREAM_MUSIC);
} else {
currentTime = 0;
}
}
public void run() {
}
}
例子2
public class MainActivity extends Activity {
private ImageButton playOrPauseBtn,stopBtn;
private MediaPlayer player;
private boolean isPlaying;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
//this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
playOrPauseBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
playOrPauseMusic();
}
});
stopBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
stopMusic();
}
});
}
private void init(){
player =MediaPlayer.create(this, R.raw.music.mp3);
stopBtn.setEnabled(false);
}
private void playOrPauseMusic(){
isPlaying=player.isPlaying();
if(isPlaying){
player.pause();
playOrPauseBtn.setImageResource(R.drawable.play);
}else{
player.start();
playOrPauseBtn.setImageResource(R.drawable.pause);
}
stopBtn.setEnabled(true);
}
private void stopMusic(){
player.stop();
playOrPauseBtn.setImageResource(R.drawable.play);
stopBtn.setEnabled(false);
try{
player.prepare();//为下一次播放做准备
}catch(IOException e){
e.printStackTrace();
}catch(IllegalStateException e){
e.printStackTrace();
}
player.seekTo(0);
}
}
1、播放SD卡中的文件
(1)实例化MediaPlayer对象
(2)设置播放路径setDataSource(String path),path表示的是文件的路径
(3)准备播放文件prepare(),播放文件start(),停止播放文件stop()
MediaPlayer player =new MediaPlayer();
String path="/sdcard/temp.mp3";
player.setDataSource(path);
player.prepare();
plarer.start();
2、播放网络中的文件
(1)方法一
String path = http:XXXXXX.mp3;
接下来的和 上面雷同
(2)方法二
把网络中音频文件的路径转换成Uri,通过实例化MediaPlayer,再去播放
String path = http:XXXXXX.mp3;
Uri uri= Uri.parse(path);
MediaPlayer player =MediaPlayer.create(this,uri);
3、播放资源文件中的音频文件
(1)在项目中的res文件夹下建立文件夹 raw,把音频文件放在该文件夹中
(2)创建MediaPlayer对象,并调用它的静态方法实例化该对象MediaPlayer player = MediaPlayer.create(this,R.raw.temp);
(2)调用prepare()和start()播放音频文件