mediaplayer IllegalStateException模拟器上没有错误,但有时会在真实设备上崩溃

时间:2012-01-23 10:12:42

标签: android media-player illegalstateexception

可以解释为什么会发生这种情况。我看到媒体播放器如何在模拟器上运行良好,但有时候在实际设备上工作...而我无法解决这个问题,因为模拟器没有显示错误。

创建mp的代码

            mp = new MediaPlayer();
        mp.setDataSource(myStream);
            mp.prepare(); //also consider mp.prepareAsync().

使用stacktrace

找到的错误
java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:200)
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    at java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.IllegalStateException
    at android.media.MediaPlayer._start(Native Method)
    at android.media.MediaPlayer.start(MediaPlayer.java:798)
    at myApp.activity.com.myApp.play(myApp.java:320)
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:454)
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:185)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

和如果按照myApp.java 454

进行崩溃的行
mp.start();

请解释或帮助我。

我会很高兴

的问候,彼得。

1 个答案:

答案 0 :(得分:0)

您只能在MediaPlayerpreparedpaused时致电开始,如documenatation中所述。

这里可能存在一个时间问题,导致错误仅在某些情况下出现。即如果代码的某些部分在代码的另一部分之前运行,则MediaPlayer将处于错误状态并且会出现此崩溃。搜索调用MediaPlayer上的状态转换方法的点,并查看是否有可能以错误的顺序调用它们。

如果你不注意,看到你使用期货可以很容易地以错误的顺序调用方法。