標籤:
用到Media Player,遇到幾個問題,記一下
用法就不說了,使用的時候最好參考一下mediaPlayer的這張圖
第一個錯誤是Media Player called in state 8
這個是因為在調用start之前沒有prepare,因為我是用了
mediaPlayer = MediaPlayer.create(context, R.raw.notice);
去初始化的播放器,這個介面說明
只要成功返回了播放器就不需要再去prepare了,但是我之後多次調用stop和start,就導致出現上面錯誤,
對照圖上也可以看出來,如果在暫停時候使用多是stop,則在start之前必須重新prepare,否則報錯Media Player called in state 8
如果暫停使用pause,那麼直接start就可以,不用prepare。
第二個錯誤是Media Player called in state 0
這個錯誤是由於
public void play(){try {mediaPlayer.prepare();} catch (IllegalStateException e) {e.printStackTrace();}
mediaPlayer.start();
}
改成下面這樣
public void play(){try {mediaPlayer.setOnPreparedListener(preparedListener);mediaPlayer.prepareAsync();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();}}OnPreparedListener preparedListener = new OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();}};
一看就明白了,剛開始我調完prepare就直接去start了,但是這時候可能prepare還沒有成功,所以就報了上面的錯誤。
之後又遇到一個prepareAsync called in state 8
這個解決方案在之前那個基礎上加一行代碼,確保在prepare之前播放器已經stop了
public void play() {try {if(mediaPlayer !=null){mediaPlayer.stop();}mediaPlayer.setOnPreparedListener(preparedListener);mediaPlayer.prepareAsync();} catch (IllegalStateException e) {e.printStackTrace();}currentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);if (currentVolumn < maxVolumn) {am.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolumn, 0);}}
jason0539
微博:http://weibo.com/2553717707
部落格:http://blog.csdn.net/jason0539(轉載請說明出處)
android錯誤之MediaPlayer用法的Media Player called in state *,androidmediaplayer