Reprodução de Mídia

Tratando os Estados do MediaPlayer

Quando estamos criando aplicações que se utilizam do MediaPlayer, devemos sempre ter em mente que o MediaPlayer funciona baseado em estados. É importante ter isso implementado corretamente em todos os pontos da aplicação, pois comandos aplicados em estados errados do MediaPlayer são a principal causa de bugs em aplicações que se utilizam dessa API. Um exemplo claro disso seria executar um start antes de ter o MediaPlayer configurado para a execução do arquivo. O MediaPlayer não teria o que inicializar e isso geraria um problema interno. O diagrama de estados mostrado na Figura 1 mostra de maneira completa os estados do MediaPlayer e como atingir cada um deles. Vejamos a Figura 1 antes de passar brevemente pelos estados mais importantes.

Diagrama de estados do MediaPlayer.

Como podemos ver, o diagrama completo é bem complexo e possui diversas alterações que podem ser geradas entre os estados. Nesta aula, estudaremos apenas as principais transições. Primeiramente, ao criar ou reiniciar o MediaPlayer, vemos que ele está no estado Idle. Esse estado é incapaz de fazer qualquer ação. Após ser inicializado e entrar nesse estado, devemos configurar a fonte da mídia a ser reproduzida pelo MediaPlayer. Essa configuração gerará a mudança para o estado Initialized. Esse estado indica que o MediaPlayer está inicializado. Para utilizarmos essa instância precisamos ainda preparar a mídia que será executada. Como vimos, isso acontece através do comando prepare ou, preferencialmente, prepareAsync. Caso o comando assíncrono seja o escolhido, o MediaPlayer passará por um estado de preparação antes de chamar o onPreparedListener e entrar no estado preparado. Caso a versão síncrona seja chamada, o MediaPlayer irá executar a preparação na thread que está e irá direto ao estado preparado.

Uma vez no estado preparado, o MediaPlayer está pronto para ser utilizado e pode receber diversos comandos de interação com a mídia. O principal deles, como já vimos, é o start, responsável por começar a execução da mídia preparada. Fora ele, ainda temos a possibilidade de utilizar o comando seekTo, que irá mover a reprodução para um ponto específico da mídia. Quando o comando start for executado, o estado passará a iniciado e o MediaPlayer suportará comandos como pause e stop. O último ponto importante a se notar em relação a esse diagrama é a necessidade de se preparar novamente o arquivo antes de voltar a executá-lo, caso este seja parado pelo método stop . Tentar voltar à reprodução diretamente, sem passar pela preparação, após o stop, é uma das grandes fontes de problemas quando estamos utilizando essa API

Versão 5.3 - Todos os Direitos reservados