web-dev-qa-db-fra.com

Android: Mediaplayer est parti avec des événements non gérés

J'ai besoin d'obtenir la durée d'un fichier audio pour une série d'annonces vocales qui doivent être lues à partir d'une application. J'ai ajouté les fichiers audio comme ressources et ils fonctionnent très bien. L'exemple de code ci-dessous fonctionne en fait parfaitement pour son objectif: il renvoie la durée des fichiers audio.

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

Voici la chose étrange. Ce code est appelé dans une activité principale qui prépare l'ensemble d'instructions audio pour un test donné. Il n'y a aucune erreur dans cette activité. Mais dès que la deuxième activité est appelée, j'obtiens une longue chaîne d'erreurs sur 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>

J'ai fait un pas jusqu'à la fin de l'activité principale (pas d'erreur) et depuis la première ligne de la deuxième activité. Les erreurs sont définitivement lancées entre les activités.
De plus, si je commente les huit lignes du bloc try (ne retournant ainsi que zéro), les erreurs logcat sont évitées. Lorsque je restaure les huit lignes, les erreurs reviennent. J'ai fouillé la documentation et fouillé le Web, et je crois que je construis, libère et détruis correctement l'objet mediaplayer, donc je ne vois pas pourquoi je reçois une erreur. Cela dit, je dois faire quelque chose de mal. Des idées?

Merci,

Kevin

55
Hephaestus

Il suffit de mettre mp.reset(); avant mp.release();.

182
Andrew

Les cinq saints:

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