Подтвердить что ты не робот

Android: mediaplayer ушел с необработанными событиями

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

Вот код:

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 можно избежать. Когда я восстанавливаю восемь строк, ошибки возвращаются. Я прорыл документацию и обыскал в Интернете, и я считаю, что правильно создаю, освобождаю и уничтожаю объект медиапланера, поэтому я не понимаю, почему я получаю сообщение об ошибке. Тем не менее, я должен делать что-то неправильно. Любые идеи?

Спасибо,

Кевин

4b9b3361

Ответ 1

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

Ответ 2

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

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