關(guān)于MediaPlayer反復(fù)調(diào)用start和stop報錯:MediaPlayer start called in state 0;
1.問題
前段時間自己做一個模仿打字效果的小程序顯示文字時遇到的一個問題.
報錯:MediaPlayer start called in state 0; 主要原因在于start()出現(xiàn)問題,源于start()播放開始之前沒有調(diào)用prepare()序宦。在初始化MediaPlayer時届良,通過create()方法設(shè)置數(shù)據(jù)源懦底,則不能寫mediaPlayer.prepare()方法盗扇,只要成功返回播放器就不需要prepare蜘拉,但是:如果反復(fù)多次調(diào)用了start()和stop()方法遂唧,就會出現(xiàn)MediaPlayer start called in state 0錯誤
2.解決方法
需要在start()之前必須重新prepare()的或stop()之后調(diào)用prepare(),如果使用pause()暫停則不需要在其之后調(diào)用prepare()刻盐,直接start()就可以掏膏。
@方法一:在stop后調(diào)用Prepare()方法
? ? ? ? ? ? mMediaPlayer.start();
? ? ? ? ? ? if (mMediaPlayer.isPlaying()) {
? ? ? ? ? ? ? ? mMediaPlayer.stop();
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? mMediaPlayer.prepare();//要么在stop后調(diào)用prepare
? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
@方法二:在start之前調(diào)用prepare()方法
? 經(jīng)測試,此方法效果最佳
????????? try {
? ? ? ? ? ? ? ? ? ? mMediaPlayer.prepare();//要么在每次start之前調(diào)用prepare
? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? mMediaPlayer.start();
? ? ? ? ? ? if (mMediaPlayer.isPlaying()) {
? ? ? ? ? ? ? ? mMediaPlayer.stop();
? ? ? ? ? ? }