Android媒体播放器返回IllegalStateException

我有以下代码来播放小audio文件

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

它在三星galaxy选项卡中正常工作,但在小设备(我检查在索尼xperia微型赞成我的项目)

 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) 

Solutions Collecting From Web of "Android媒体播放器返回IllegalStateException"

你正在这样做:

  PlayVoice.release(); 

你不是这个意思吗?

  mPlayVoice.release(); 

如果您有其他问题,这是最好的文件咨询:

Android MediaPlayer

编辑

好吧,如果你在这里: isPlaying()无效的状态显示你正试图调用isPlaying(),而玩家处于错误状态。 所以你需要弄清楚为什么它已经处于错误状态。

一般来说,由于各种原因(如不支持的audio/video格式,不良的audio/video交错,分辨率过高,stream超时等等),一些回放控制操作可能失败。

看看添加一个错误监听器: setOnErrorListener()

使用下面的代码,因为我面临着同样的exception。

 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 …..

您可能必须清除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()); } }