Android媒体播放器返回IllegalStateException

vns*_*tty 9 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();
 }
Run Code Online (Sandbox Code Playgroud)

它在三星galaxy选项卡中工作正常,但在小型设备中出现以下错误(我在索尼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)
Run Code Online (Sandbox Code Playgroud)

Blu*_*ell 12

你这样做:

 PlayVoice.release(); 
Run Code Online (Sandbox Code Playgroud)

你不是故意的吗?

 mPlayVoice.release(); 
Run Code Online (Sandbox Code Playgroud)

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

Android MediaPlayer

编辑

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

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

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


pic*_*aso 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){
}
Run Code Online (Sandbox Code Playgroud)

写下你想做的任何事情.实际上条件检查像isPlaying()或检查null会生成IllegalStateException .....