Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android錯誤之MediaPlayer用法的Media Player called in state *

android錯誤之MediaPlayer用法的Media Player called in state *

編輯:關於Android編程

用到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 block e.printStackTrace(); } } OnPreparedListener preparedListener = new OnPreparedListener() { @Override public 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);
		}
	}


 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved