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) 

  • Android媒体播放器在呼叫停止后重新启动audio
  • 从资产文件夹设置通知声音
  • 如何在确定模式下使用Android ProgressBar?
  • Android ExoPlayer:它是否解决Android媒体播放器的无缝/无缝播放问题
  • Android:MediaPlayer无缝或无缝的video播放
  • Android SeekBar来控制MediaPlayer的进度
  • Android:Mediaplayer:如何使用SurfaceView或者mediaplayer播放正确大小的video
  • Android:单击TextView从原始资源播放mp3文件
  • 你正在这样做:

      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()); } }