关于MediaPlayer反复调用start和stop报错:MediaPlayer start called in state 0;
1.问题
前段时间自己做一个模仿打字效果的小程序显示文字时遇到的一个问题.
报错:MediaPlayer start called in state 0; 主要原因在于start()出现问题,源于start()播放开始之前没有调用prepare()。在初始化MediaPlayer时,通过create()方法设置数据源,则不能写mediaPlayer.prepare()方法,只要成功返回播放器就不需要prepare,但是:如果反复多次调用了start()和stop()方法,就会出现MediaPlayer start called in state 0错误
2.解决方法
需要在start()之前必须重新prepare()的或stop()之后调用prepare(),如果使用pause()暂停则不需要在其之后调用prepare(),直接start()就可以。
@方法一:在stop后调用Prepare()方法
mMediaPlayer.start();
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
try {
mMediaPlayer.prepare();//要么在stop后调用prepare
} catch (IOException e) {
e.printStackTrace();
}
}
@方法二:在start之前调用prepare()方法
经测试,此方法效果最佳
try {
mMediaPlayer.prepare();//要么在每次start之前调用prepare
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.start();
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}