58 votes

Android: le lecteur multimédia 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 qui ont besoin de jouer à partir d'une application. J'ai ajouté les fichiers audio que les ressources et ils jouent très bien. L'exemple de code ci-dessous fonctionne réellement parfait pour son usage prévu: elle retourne 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 des instructions audio pour un test donné. Il n'y a pas d'erreurs dans cette activité. Mais dès la Deuxième activité est appelé, je reçois une longue série d'erreurs sur le 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 une seule avança jusqu'à la fin de l'activité Principale (pas d'erreurs) et à partir de la première ligne de la Deuxième activité. Les erreurs sont certainement jeté entre les activités.
Aussi, si j'en commentaire les huit lignes du bloc try (donc en ne retournant que zéro) le logcat les erreurs sont évitées. Quand j'ai restaurer les huit lignes les erreurs de revenir. J'ai creusé à travers la documentation et cherché sur le web, et je crois que je suis bien la construction, de la libération et de détruire le mediaplayer de l'objet, donc je ne vois pas pourquoi j'obtiens une erreur. Cela dit, je dois être en train de faire quelque chose de mal. Des idées?

Merci,

Kevin

190voto

Andrew Points 696

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

45voto

Li3ro Points 449

Les cinq saints:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X