2011-08-17 28 views
9

我有下面的代碼打小的音頻文件Android的媒體播放器返回IllegalStateException異常

private void playVoice() { 

    if (mPlayVoice != null) { 
     if (mPlayVoice.isPlaying()) { 
      mPlayVoice.release(); 
      mPlayVoice = null; 
     } 
    } 
    mPlayVoice = 
     MediaPlayer.create(BirdsActivity.this, mSoundIds[getCurrentIndex()]); 
    mPlayVoice.start(); 
} 

它工作在三星Galaxy Tab罰款,但在小型設備下面的錯誤給了(我查了索尼XPERIA mini pro的我的項目)

08-17 12:45:45.232: ERROR/AndroidRuntime(6639): java.lang.IllegalStateException 
    08-17 12:45:45.232: ERROR/AndroidRuntime(6639):  at android.media.MediaPlayer.isPlaying(Native Method) 
    08-17 12:45:45.232: ERROR/AndroidRuntime(6639):  at   com.android.mds.kidsapps.alphakids.BirdsActivity.playVoice(BirdsActivity.java:146) 

回答

12

你這樣做:

PlayVoice.release(); 

你不是說

mPlayVoice.release(); 

如果您還有其他問題,這是最好的文檔諮詢:

Android MediaPlayer

編輯

好吧,如果你現在的位置:isPlaying() Invalid States它展示的你想在播放器處於錯誤狀態時調用isPlaying()。所以你需要弄清楚爲什麼它在已經是處於錯誤狀態。

一般來說,一些播放控制操作可能因爲各種原因,如不支持的音頻/視頻格式,交錯的不良音頻/視頻,分辨率太高,流超時,等等。

看一看增加錯誤監聽器:setOnErrorListener()

+0

其實,這是沒有問題的..張貼問題 – vnshetty

+0

期間它發生那麼,什麼是線146 BirdsActivity? – Blundell

+0

if(mPlayVoice.isPlaying()) – vnshetty

10

,因爲我正面臨着同樣的異常使用下面的代碼。

try { 
    if(mPlayVoice!=null && mPlayVoice.isPlaying()) { 
     Log.d("TAG------->", "player is running"); 
     mPlayVoice.stop(); 
     Log.d("Tag------->", "player is stopped"); 
     mPlayVoice.release(); 
     Log.d("TAG------->", "player is released"); 
    } 
} catch(Exception e){ 
} 

這裏寫任何你想做的事情。實際上,檢查isPlaying()或檢查null的條件會生成IllegalStateException .....

2

您可能必須清除audioGroup與audioStream的連接。礦用下面的代碼工作:

public static void audioPlayCaptureStop() 
     { 

      try 
      { 
       if(audioStream.isBusy()) 
       { 
        audioGroup.clear(); 
        audioStream.release(); 
        System.out.println("audioStream released"); 
       } 

      } catch (Exception e) { 
       System.out.println("audioStream release exception: "+e.toString()); 
      } 
     }