如上图,播放器包括一个EditText,4个Button
首先,创建一个MediaPlayer类,这个媒体播放器类既可以播放视频,又可以播放音频
MediaPlay mediaPlayer = new MediaPlayer();
下面介绍MediaPlayer中的几个方法
prepare()
第一次播放之前必须调用该方法,该方法是播放器对一些硬件的调用,其实是调用本地C/C++的一些方法,如果没有调用,播放器将不能播放
start()
执行播放功能,如果之前播放器暂停过,则从暂停的地方开始播放,否则从头播放
int getCurrentPosition()
获取播放器当前的播放位置
seekTo(int position)
设置播放器从何处开始播放
reset()
使得播放器到未初始化状态,如果要重新播放,必须先调用prepare()
setDataSource(String path)
设置播放资源的路径
pause()
暂停播放
下面将展示完整的播放器代码
public class AudioActivity extends Activity {
public static final String TAG = "AudioActivity";
private EditText txt_name;
private Button btn_play;
private Button btn_pause;
private Button btn_reset;
private Button btn_stop;
private String fileName;
private MediaPlayer mediaPlayer;
private int position;
public void onClick(View v) {
fileName = txt_name.getText().toString();
Button button = (Button)v;
try {
switch(v.getId()){
case R.id.btn_play:
play();
case R.id.btn_pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
button.setText(R.string.go_on);
}else{
mediaPlayer.start();
button.setText(R.string.pause);
}
break;
case R.id.btn_reset:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
play();
}
break;
case R.id.btn_stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState()");
}
@Override
protected void onSaveInstanceState(Bundle outState) {//Activity被挂起时调用
outState.putInt("position", mediaPlayer.getCurrentPosition());
outState.putString("fileName", fileName);
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState()");
}
@Override
protected void onDestroy() {
mediaPlayer.release();
super.onDestroy();
Log.i(TAG, "onDestroy()");
}
@Override
protected void onPause() {
position = mediaPlayer.getCurrentPosition();//保存当前播放位置
mediaPlayer.pause();
super.onPause();
Log.i(TAG, "onPause()");
}
@Override
protected void onResume() {
if(position>0&&fileName!=null){//如果程序曾经暂停过
try {
play();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
position=0;//从原来的位置开始播放必须将原来的位置清0
}
super.onResume();
Log.i(TAG, "onResume()");
}
private void play() throws IOException {
if(mediaPlayer.isPlaying())
return;
File audioFile = new File(Environment.getExternalStorageDirect
ory(),fileName);
mediaPlayer.reset();//播放器状态的重设
mediaPlayer.setDataSource(audioFile.getAbsolutePath());//设置播放数据源
mediaPlayer.prepare();//一些硬件的准备
mediaPlayer.start();//开始播放
mediaPlayer.seekTo(position);//设置从position位置开始播放
Log.i(TAG, "play()");
}
}
至此音频播放器结束,如有疑问,可留言