安卓媒体播放器返回IllegalStateException异常

9

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

private void playVoice() {

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

在三星 Galaxy Tab 中运行良好,但在小型设备上(我在 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个回答

12

你正在做这个:

 PlayVoice.release(); 

你的意思不是...吗?

 mPlayVoice.release(); 
如果你有其他问题,最好参考这篇文档:Android MediaPlayer
编辑:如果你在这里:isPlaying() Invalid States,那么它会显示当播放器处于错误状态时尝试调用isPlaying()。因此,您需要弄清楚它为什么已经处于错误状态。
一般来说,某些播放控制操作可能由于各种原因而失败,例如:不支持的音频/视频格式、音频/视频交织不良、分辨率过高、流超时等。请尝试添加错误侦听器:setOnErrorListener()

实际上那不是问题所在...是在发布问题时发生的。 - vnshetty
那么BirdsActivity中的第146行是什么? - Blundell
在我的情况下,我正在设置videoView.sestOnPreparedListener(.....)并在onPrepared中获取mediaPlayer,现在我有全局的mediaplayer对象,所以我正在做像globalM = mp这样的事情(这是我的要求),然后在globalMp中设置音量并得到IllegalStateException(但不是每次都出现),问题出在哪里?我是否需要设置globalMp.prepare...,即使我从videoView的准备监听器中得到它? - Vivek Thummar

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

您可能需要清除与音频流连接的音频组。我的代码如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接