import java.io.File;import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;public class MainActivity extends Activity implements OnClickListener { private Button play;
private Button pause;
private Button stop;
private MediaPlayer mediaPlayer=new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        play=(Button) findViewById(R.id.play);
        pause=(Button) findViewById(R.id.pause);
        stop=(Button) findViewById(R.id.stop);
        
        initMediaPlayer();//初始化MediaPlayer
        
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        stop.setOnClickListener(this);
               
    }
    
    private void initMediaPlayer(){
     try{
     File file=new File(Environment.getExternalStorageDirectory(),"music.mp3");
     mediaPlayer.setDataSource(file.getPath());//指定音频文件的路径
     mediaPlayer.prepare();//让MediaPlayer进入准备状态
     }catch(Exception e){
     e.printStackTrace();
     }
    } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.play:
if(!mediaPlayer.isPlaying()){
mediaPlayer.start();//开始播放
}
break;
case R.id.pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();//暂停播放
}
break;
case R.id.stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.reset();//停止播放
initMediaPlayer();
}
break;
default:
break;
}

}

@Override
protected void onDestroy(){
super.onDestroy();
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
}

}
}

解决方案 »

  1.   

    必须要实现 onPreparedListener 在回调函数里面 进行 mediaplayer.start()  说明资源已经准备好了,另外要保证         有SDCARD读写权限。
      

  2.   

    发现是SDCARD权限未写,prepare没有问题,可以了谢谢大神的回答
      

  3.   

    SDCARD的权限已经写了,但是还是会出现这个错误,是啥原因,跪求大神解答