🚀 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
MediaPlayernativo 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.