android java.lang.IllegalStateException MediaPlayer.isPlaying

时间:2013-03-31 15:01:58

标签: android android-mediaplayer

我发布了我的应用程序以及某些手机,例如我的APP崩溃的Galaxy Nexus或HTC Explorer。

我在很多手机上测试过,应用程序运行得很好。

你能解释一下为什么会发生这种情况以及如何解决这个问题吗?

错误

java.lang.IllegalStateException
at android.media.MediaPlayer.isPlaying(Native Method)
at com.mario.kvizoman.SoloIgra.novopitanjce(SoloIgra.java:922)
at com.mario.kvizoman.SoloIgra.onClick(SoloIgra.java:901)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3768)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
at dalvik.system.NativeStart.main(Native Method)

代码

if(reptimer!=null) {
    if(reptimer.isPlaying()) {
        reptimer.stop();
    }
}

onCreate reptimer

reptimer = MediaPlayer.create(SoloIgra.this, R.raw.napeto);

2 个答案:

答案 0 :(得分:11)

根据Android文档:“如果内部播放器引擎尚未初始化或已被释放,则为IllegalStateException。”

因此,请确保您的MediaPlayer已初始化,并且您不使用已发布的MediaPlayer。

答案 1 :(得分:5)

在您的代码中,由于repTimer.isPlaying()被调用,我认为JAVA repTimer对象不是 NULL。但是,IllegalStateException native对象为MediaPlayer时会触发NULL(参考:http://androidxref.com/4.2.2_r1/xref/frameworks/base/media/jni/android_media_MediaPlayer.cpp#380)。因此,您的JAVA州和native州之间存在一些不匹配。

P.S:您可能需要在此问题中粘贴位置之前检查代码。在某些早期的方法调用中,本机对象已被破坏,而这种对象未反映在JAVA对象状态中。