mainActivity如下:
package cn.com;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.Activity;
/**
* 重要错误总结:
* Eclipse报错prepareAsync called in state 8
* 原因:
* 在initView()方法中:
* mMediaPlayer=MediaPlayer.create(MainActivity.this, R.raw.big);
* 为此mMediaPlayer设置了要播放的资源
* 但是在点击stop按钮以后,执行了mMediaPlayer.release();
* 这样的话就释放了资源.所以报错
* 解决办法:
* 在每次点击play的时候,都执行MediaPlayer.create()
* 注意:
* 可以在每次点击暂停的时候保存现在播放的位置即:
* position=mMediaPlayer.getCurrentPosition();
* 然后在每次播放的时候
* mMediaPlayer.seekTo(position);
* 这样就会从暂停处继续播放
*
*
*/
public class MainActivity extends Activity {
private TextView mTextView;
private MediaPlayer mMediaPlayer;
private ImageView mPlayerImageView;
private ImageView mPauseImageView;
private ImageView mStopImageView;
private boolean isPause=false;
private boolean isStop=false;
private boolean isStart=false;
private int currentPosition=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
}
private void initView(){
mTextView=(TextView) findViewById(R.id.textView);
mPlayerImageView=(ImageView) findViewById(R.id.playerImageButton);
mPlayerImageView.setOnClickListener(new ButtonOnClickListener());
mPauseImageView=(ImageView) findViewById(R.id.pauseImageButton);
mPauseImageView.setOnClickListener(new ButtonOnClickListener());
mStopImageView=(ImageView) findViewById(R.id.stopImageButton);
mStopImageView.setOnClickListener(new ButtonOnClickListener());
mMediaPlayer=new MediaPlayer();
// mMediaPlayer=MediaPlayer.create(MainActivity.this, R.raw.big);
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mMediaPlayer.release();
mTextView.setText("音乐播放完毕");
}
});
mMediaPlayer.setOnErrorListener(new OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
mMediaPlayer.release();
mTextView.setText("音乐播放错误");
return false;
}
});
}
private class ButtonOnClickListener implements OnClickListener {
public void onClick(View v) {
switch (v.getId()) {
case R.id.playerImageButton:
if (!isStart) {
try {
mMediaPlayer=MediaPlayer.create(MainActivity.this, R.raw.big);
//mMediaPlayer.prepare();
mMediaPlayer.seekTo(currentPosition);
mMediaPlayer.start();
mMediaPlayer.setLooping(true);
mTextView.setText("开始音乐播放");
isStart = true;
isPause = false;
isStop = false;
} catch (Exception e) {
}
}
break;
case R.id.pauseImageButton:
if (mMediaPlayer != null) {
if (!isStop) {
if (!isPause) {
mMediaPlayer.pause();
mTextView.setText("暂停音乐播放");
currentPosition=mMediaPlayer.getCurrentPosition();
isPause = true;
isStop = false;
isStart = false;
} else {
mMediaPlayer.start();
mTextView.setText("继续播放音乐");
isStart = true;
isPause = false;
isStop = false;
}
}
}
break;
case R.id.stopImageButton:
if (mMediaPlayer != null) {
if (isStart) {
if (!isStop) {
mMediaPlayer.stop();
mMediaPlayer.release();
mTextView.setText("停止音乐播放");
currentPosition=0;
isStop = true;
isPause = false;
isStart = false;
}
}
}
break;
default:
break;
}
}
}
}
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="测试MediaPlayer"
android:textSize="30sp"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="70dip"
android:orientation="horizontal"
android:layout_below="@id/textView"
>
<ImageView
android:id="@+id/playerImageButton"
android:layout_width="70dip"
android:layout_height="70dip"
android:src="@drawable/player"
/>
<ImageView
android:id="@+id/pauseImageButton"
android:layout_width="70dip"
android:layout_height="70dip"
android:src="@drawable/pause"
android:layout_marginLeft="20dip"
/>
<ImageView
android:id="@+id/stopImageButton"
android:layout_width="70dip"
android:layout_height="70dip"
android:src="@drawable/stop"
android:layout_marginLeft="20dip"
/>
</LinearLayout>
</RelativeLayout>