Android播放音乐
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>