mediaplayer IllegalStateException - нет ошибок на эмуляторе, но иногда происходит сбой на реальном устройстве. - PullRequest
0 голосов
/ 23 января 2012

Может ли кто-нибудь объяснить, почему это происходит. Я вижу, как медиаплеер хорошо работает на эмуляторе, но иногда работает на реальном устройстве ... и я не могу это исправить, потому что эмулятор не показывает ошибку.

код для создания мп

            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 голосов
/ 23 января 2012

Вы можете позвонить на старт, только когда MediaPlayer подготовлен или приостановлен , как четко описано в документации .

Возможно, здесь есть проблема синхронизации, из-за которой ошибка появляется только при определенных обстоятельствах. Т.е. если какая-то часть вашего кода запускается раньше другой части кода, ваш MediaPlayer будет в неправильном состоянии, и это аварийное завершение появится. Найдите точки, в которых вызываются методы перехода состояний на MediaPlayer, и посмотрите, есть ли вероятность, что они вызываются в неправильном порядке.

Видение того, что вы используете фьючерсы, облегчает вызов методов в неправильном порядке, если вы не обращаете внимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...