【问题标题】:Android media player returns IllegalStateExceptionAndroid 媒体播放器返回 IllegalStateException
【发布时间】:2011-08-17 07:24:08
【问题描述】:

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

private void playVoice() {

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

它在三星 Galaxy 选项卡中运行良好,但在小型设备中出现以下错误(我在 Sony 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)

【问题讨论】:

    标签: android media-player


    【解决方案1】:

    你正在这样做:

     PlayVoice.release(); 
    

    你不是说

     mPlayVoice.release(); 
    

    如果您有其他问题,这是最好的参考文档:

    Android MediaPlayer

    编辑

    好的,如果你在这里:isPlaying() Invalid States 它表明你试图在播放器处于错误状态时调用 isPlaying()。所以你需要弄清楚为什么它已经处于错误状态。

    一般来说,某些播放控制操作可能会由于各种原因而失败,例如不支持的音频/视频格式、差错的音频/视频、分辨率太高、流超时等。

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

    【讨论】:

    • 其实这不是问题..它是在发布问题时发生的
    • 那么 BirdsActivity 中的第 146 行是什么?
    • 在我的情况下,我设置videoView.sestOnPreparedListener(.....) 并在onPrepared 中获取mediaPlayer,现在我有全局媒体播放器对象,所以我正在做类似globalM = mp 的事情(这是我的要求) 然后在globalMp 中设置音量并获得IllegalStateException(但不是每次),有什么问题,我是否必须设置globalMp.prepare...,即使我是从videoView 的准备听众那里得到的?
    【解决方案2】:

    使用下面的代码,因为我遇到了同样的异常。

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

    【讨论】:

      【解决方案3】:

      您可能需要清除加入 audioStream 的 audioGroup。我使用以下代码:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多