wake-up-neo.com

Android: Mediaplayer ging mit unbehandelten Ereignissen weg

Ich muss die Dauer einer Audiodatei für eine Reihe von Sprachansagen abrufen, die über eine App abgespielt werden müssen. Ich habe die Audiodateien als Ressourcen hinzugefügt und sie werden einwandfrei wiedergegeben. Der folgende Beispielcode funktioniert tatsächlich perfekt für den beabsichtigten Zweck: Er gibt die Dauer der Audiodateien zurück.

Hier ist der Code:

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;
}

Hier ist die seltsame Sache. Dieser Code wird in einer Hauptaktivität aufgerufen, die die Audioanweisungen für einen bestimmten Test vorbereitet. Es gibt keine Fehler in dieser Aktivität. Aber sobald die zweite Aktivität aufgerufen wird, erhalte ich eine lange Reihe von Fehlern bei 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>

Ich bin bis zum Ende der Hauptaktivität (ohne Fehler) und von der ersten Zeile der zweiten Aktivität in einem Schritt vorgegangen. Die Fehler werden definitiv zwischen den Aktivitäten geworfen.
Auch wenn ich die acht Zeilen des try-Blocks auskommentiere (und somit nur Null zurückgebe), werden die logcat-Fehler vermieden. Wenn ich die acht Zeilen wiederherstelle, kommen die Fehler zurück. Ich habe die Dokumentation durchgesehen und das Web durchsucht und glaube, dass ich das Mediaplayer-Objekt richtig konstruiere, freigebe und zerstöre. Daher kann ich nicht erkennen, warum ich einen Fehler erhalte. Das heißt, ich muss etwas falsch machen. Irgendwelche Ideen?

Vielen Dank,

Kevin

55
Hephaestus

Setzen Sie einfach mp.reset(); vor mp.release();.

182
Andrew

Die heiligen fünf:

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