Exibir um card do "Tocando agora"

Os apps para TV precisam exibir um card Tocando agora ao reproduzir mídia por trás da tela de início ou em segundo plano. Esse card permite que os usuários retornem ao app que está exibindo mídia.

O framework do Android mostra um card Tocando agora na tela inicial quando há um MediaSession ativo. O card inclui metadados de mídia, como a capa do álbum, o título e um ícone do app. Quando o usuário seleciona esse card, o sistema abre o app.

Você pode usar a classe MediaSession para implementar o card Tocando agora.

Figura 1. Mostre um card Tocando agora ao reproduzir mídia em segundo plano.

Card Tocando agora

Depois de implementar uma sessão de mídia, definir a sessão como ativa e solicitar a seleção de áudio, o card Tocando agora será exibido.

Observação:o card Tocando agora é exibido somente para uma sessão de mídia com a flag FLAG_HANDLES_TRANSPORT_CONTROLS definida. Essa sinalização foi descontinuada no nível 26 da API. No entanto, essa sinalização ainda pode ser necessária em dispositivos mais antigos para garantir a compatibilidade com versões anteriores.

O card é removido da tela de início quando uma chamada setActive(false) desativa a sessão de mídia ou quando outro app inicia a reprodução. Se a reprodução for completamente interrompida e não houver mídia ativa, desative a sessão de mídia imediatamente. Se a reprodução estiver pausada, desative a sessão de mídia após um atraso, geralmente de 5 a 30 minutos.

Atualize o cartão

Sempre que seu app atualiza o estado da reprodução no MediaSession, o card Tocando agora é atualizado para mostrar o estado da mídia atual. Para saber como fazer isso, consulte Atualizar o estado da reprodução.

Da mesma forma, seu app pode atualizar o MediaMetadata para fornecer informações ao card Tocando agora sobre a mídia atual, como título, subtítulo e vários ícones. Para saber como fazer isso, consulte Atualizar os metadados de mídia.

Responder à ação do usuário

Quando o usuário seleciona o card Tocando agora, o sistema abre o app proprietário da sessão. Se o app fornecer um PendingIntent para setSessionActivity(), o sistema vai iniciar a atividade especificada, conforme mostrado no snippet de código a seguir. Caso contrário, a intent padrão do sistema será aberta. A atividade especificada precisa oferecer controles de reprodução que permitam aos usuários pausar ou interromper a reprodução.

Kotlin

val pi: PendingIntent = Intent(context, MyActivity::class.java).let { intent ->
    PendingIntent.getActivity(
            context, 99 /*request code*/,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT
    )
}
session.setSessionActivity(pi)

Java

Intent intent = new Intent(context, MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 99 /*request code*/,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
session.setSessionActivity(pi);