Android媒体播放器返回IllegalStateException

时间:2011-08-17 07:24:09

标签: android media-player

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

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)

3 个答案:

答案 0 :(得分:12)

你这样做:

 PlayVoice.release(); 

你不是说

 mPlayVoice.release(); 

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

Android MediaPlayer

修改

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

  通常,一些回放控制操作可能由于各种原因而失败,例如不支持的音频/视频格式,交错的音频/视频,分辨率太高,流超时等。

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

答案 1 :(得分: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 :(得分:2)

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