2012-08-09 4 views
12

Tengo problemas con MediaPlayer de Android. Parece que le falta una funcionalidad importante, principalmente una forma de obtener el estado actual de MediaPlayer o averiguar si está preparado. Sé que hay un oyente preparado, pero el MediaPlayer dura más que la Actividad, por lo que cuando se reanude la Actividad de reproducción, sería bueno obtener el estado del jugador actual, ya sea que esté intentando cargar medios, si los medios están cargados, etc. ¿Me estoy perdiendo algo, o tengo que hacer un seguimiento de los estados del jugador por mí mismo?Android mediaPlayer - ¿hay un método "isPrepared()" o "getStatus()"?

Otra funcionalidad que sería agradable sería onPlayStateChanged(): actualmente tengo que seguir el estado de reproducción manualmente. ¿Lo estoy haciendo mal?

Respuesta

11

Espero que no sea demasiado tarde para obtener una respuesta. La clase MediaPlayer no tiene un método isPrepared() o getStatus(), y usted debe hacer un seguimiento de su estado usted mismo. Sin embargo, eso no es tan difícil.

La clase MediaPlayer tiene un buen diagrama de estado que realmente ayuda. Debes implementar tu servicio basado en ese diagrama. Además, si siempre controlas el objeto MediaPlayer desde el mismo hilo, es fácil hacer un seguimiento de su estado, así que te recomiendo que lo hagas. El método prepareAsync() es el único método asíncrono del que tiene que ocuparse, pero puede mantener un booleano que indique que el reproductor está siendo preparado, lo que sería 'verdadero' desde la llamada prepareAsync() hasta que onPrepared() sea llamado. De todos modos, siempre puede implementar onError y atrapar la IllegalStateException para evitar bloqueos si accidentalmente llama a cualquier método desde un estado ilegal. Sin embargo, el media playback guide me ayudó mucho.

+8

Marcado esto como la respuesta aceptada. La triste realidad es que Android para reproducción/consumo de medios realmente no existe e incluso falta la funcionalidad básica, como la recuperación de estado. La mejor manera de evitarlo es que usted escriba un contenedor alrededor del objeto MediaPlayer y almacene el estado usted mismo. – StackOverflowed

+5

Acabo de toparme con este problema yo mismo. Una supervisión tan ridícula dada la sensibilidad de sus métodos al estado actual. –

7

que tenía que ver el estado durante la depuración para solucionar un problema, por lo que acaba de colocar este código en algún lugar después de saber el MediaPlayer se había preparado:

try { 
    this.audioPlayer.prepare(); 
} catch (Exception e) { 
} 

que imprime un error en la consola como "E/MediaPlayer: prepareAsync llamado en el estado 32. "

Ahora bien, si solo pudiera encontrar un lugar en el que se enumeran todos los códigos de estado ...

+0

Me preguntaba si conoces la lista de códigos de estado. :) – Talha

Cuestiones relacionadas