Android: медиаплеер ушел с необработанными событиями - PullRequest
54 голосов
/ 08 марта 2012

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

Вот код:

float getDurationOfAudioResource(LocationEnum loc, Context context){
    float  duration = 0;
    try {
        MediaPlayer mp; 
        mp = MediaPlayer.create(context, getAudioResource(loc));
        duration = mp.getDuration();
        mp.release();
        mp = null;
    }
    catch (IllegalStateException e) {e.printStackTrace(); logError(25, "TestDescItem:Fault::Could not open mediaplayer object with audio resource.");} 
    return duration;
}

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

03-07 13:23:43.820: I/ActionLogger(21435): GenTest_Info_Test #0 successfully created.
03-07 13:23:43.830: I/ActionLogger(21435): GenTest_Info_Test #1 successfully created.
03-07 13:23:43.840: I/ActionLogger(21435): GenTest_Info_Test #2 successfully created.
03-07 13:23:43.850: I/ActionLogger(21435): GenTest_Info_Test #3 successfully created.
<snip>
03-07 13:23:43.910: I/ActionLogger(21435): GenTest_Info_all tests successfully created.
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events
03-07 13:23:47.270: W/MediaPlayer(21435): mediaplayer went away with unhandled events
<snip>

Я пошагово до конца основного действия (без ошибок) и из первогоНаправление Второй деятельности.Ошибки определенно выбрасываются между действиями.
Кроме того, если я закомментирую восемь строк блока try (таким образом, возвращая только ноль), ошибки logcat будут исключены.Когда я восстанавливаю восемь строк, ошибки возвращаются.Я копался в документации и искал в Интернете, и я считаю, что я правильно конструирую, выпускаю и уничтожаю объект медиаплеера, поэтому не могу понять, почему я получаю ошибку.Тем не менее, я должен делать что-то не так.Есть идеи?

Спасибо,

Кевин

Ответы [ 2 ]

180 голосов
/ 02 апреля 2012

Просто поставьте mp.reset(); перед mp.release();.

41 голосов
/ 11 октября 2014

Святая пятерка:

    if(mp!=null) {
        if(mp.isPlaying())
            mp.stop();
        mp.reset();
        mp.release();
        mp=null;
    }
...