下面是一个简单的播放器,有四个按钮,分别播放,暂停,继续,停止
package com.example.mediaplayer;
import java.io.IOException;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
MediaPlayer mPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPlayer = new MediaPlayer();
//播放
Button start_music = (Button)findViewById(R.id.start_music);
start_music.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
try {
mPlayer.setDataSource("/sdcard/11.mp3");
//使用要用异步的prepared,避免UI界面响应慢,用户体验差
mPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mPlayer.start();
}
});
mPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
//暂停
Button pause_music = (Button)findViewById(R.id.pause_music);
pause_music.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mPlayer.pause();
}
});
//继续
Button continue_music = (Button)findViewById(R.id.continue_music);
continue_music.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mPlayer.start();
}
});
//停止
Button stop_music = (Button)findViewById(R.id.stop_music);
stop_music.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(mPlayer != null){
mPlayer.stop();
mPlayer.release();
mPlayer = null;
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
layout界面这里就不给出源码,就四个按钮,分别改好对应好名字就可以。
要点:
1.为什么要使用prepareAsync()方法,而不使用prepare()方法呢?因为prepare()方法的作用是获取和解码媒体数据,需要一定的时间,这样会有可能堵塞UI界面,产生ANR错误(Application not respose),prepareAsync()是异步的,不会堵塞当前的UI界面。
2.当运行stop()方法的时候要释放资源。mediaPlayer.release(),mediaPlayer=null.以免资源浪费,内存泄露。