2012-03-07 11 views
45

Necesito obtener la duración de un archivo de audio para una serie de anuncios de voz que deben reproducirse desde una aplicación. He agregado los archivos de audio como recursos y juegan muy bien. El siguiente código de ejemplo funciona realmente perfecto para su propósito previsto: devuelve la duración de los archivos de audio.Android: mediaplayer se fue con eventos no administrados

Aquí está el código:

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

Esto es lo raro. Este código se llama en una actividad principal que prepara el conjunto de instrucciones de audio para una prueba determinada. No hay errores dentro de esta actividad. Pero tan pronto como se llama a la segunda actividad, recibo una larga cadena de errores en 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> 

tengo hasta el final de la actividad principal (sin errores) y desde la primera línea de la segunda actividad intensificado sola. Los errores definitivamente se lanzan entre las actividades.
Además, si comente las ocho líneas del bloque try (devolviendo solo cero), se evitarán los errores de logcat. Cuando restauro las ocho líneas, vuelven los errores. He buscado en la documentación y buscado en la web, y creo que estoy construyendo, liberando y destruyendo correctamente el objeto del reproductor multimedia, por lo que no veo por qué me aparece un error. Dicho esto, debo estar haciendo algo mal. ¿Algunas ideas?

Gracias,

Kevin

Respuesta

160

sólo hay que poner mp.reset(); antes mp.release();.

+0

excelente. ¡Eso lo solucionó! ¡Gracias! – Hephaestus

+9

¿Qué hace eso? – Casebash

+4

versión hace que mi videoview se bloquee con IllegalStateException después ... – Ron

34

El santo cinco:

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

Funcionó como un amuleto – locrizak

+0

Para cualquiera que use VideoView, esto es similar a lo que hace en 'stopPlayback();' – vvolkgang

Cuestiones relacionadas