🚀 7.3 Reprodução Profissional de Áudio e Vídeo

O Android oferece APIs poderosas para transformar seu dispositivo em um centro multimídia. Para o BoaViagem, aprenderemos a utilizar o MediaPlayer para áudio e a VideoView para vídeos, seguindo as melhores práticas de gerenciamento de recursos.

Execução de Áudio com MediaPlayer

O MediaPlayer é ideal para sons curtos e músicas locais. No entanto, para uma experiência Premium, devemos gerenciar o ciclo de vida do player rigorosamente:

private MediaPlayer player;
 
public void executarMusica(int resId) {
    liberarPlayer();
    player = MediaPlayer.create(this, resId);
    player.setOnCompletionListener(mp -> liberarPlayer());
    player.start();
}
 
private void liberarPlayer() {
    if (player != null) {
        player.release();
        player = null;
    }
}

Streaming e Preparação Assíncrona (Java 17)

Ao carregar áudio da internet, nunca utilize prepare(). Use prepareAsync() para não travar a interface:

public void executarStream(String url) {
    player = new MediaPlayer();
    player.setAudioAttributes(new AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .build());
    
    player.setDataSource(url);
    player.setOnPreparedListener(MediaPlayer::start); // Quando pronto, toca!
    player.prepareAsync(); 
}

Reprodução de Vídeo com VideoView

Para vídeos, a VideoView abstrai a complexidade do SurfaceView e do MediaPlayer interno:

public void reproduzirVideo(Uri uri) {
    binding.videoView.setVideoURI(uri);
    var controller = new MediaController(this);
    binding.videoView.setMediaController(controller);
    binding.videoView.start();
}

IMPORTANT

O Futuro é Media3 (ExoPlayer): Para aplicativos que exigem streaming Adaptativo (HLS/DASH) ou suporte a legendas complexas, a recomendação da Google é a biblioteca Jetpack Media3 (ExoPlayer). Ela resolve problemas de buffer e compatibilidade que o MediaPlayer nativo não alcança.

CAUTION

Audio Focus: Apps “Premium” respeitam outros sons. Utilize o AudioManager.requestAudioFocus() para pausar sua música automaticamente quando o usuário receber uma ligação ou outro app (como o Spotify) começar a tocar.

TIP

No Java 17, utilize Method References (ex: MediaPlayer::start) em seus listeners para um código mais limpo e legível.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️