2011-08-17 30 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()); 
      } 
     }