Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo mostra como configurar seu aplicativo para que a mídia continue a ser reproduzida quando seu aplicativo for movido do primeiro plano para o plano de fundo. Isso significa que, mesmo depois que o usuário minimizou seu aplicativo, retornou à tela inicial ou navegou para fora do seu aplicativo de alguma outra forma, seu aplicativo poderá continuar a reproduzir áudio.
Os cenários para reprodução de áudio em segundo plano incluem:
Listas de reprodução de longa duração: O usuário abre brevemente um aplicativo em primeiro plano para selecionar e iniciar uma lista de reprodução, após o que o usuário espera que a lista de reprodução continue sendo reproduzida em segundo plano.
Usando o seletor de tarefas: O usuário abre brevemente um aplicativo em primeiro plano para começar a reproduzir áudio e, em seguida, alterna para outro aplicativo aberto usando o seletor de tarefas. O usuário espera que o áudio continue sendo reproduzido em segundo plano.
A implementação de áudio em segundo plano descrita neste artigo permitirá que seu aplicativo seja executado universalmente em todos os dispositivos Windows, incluindo dispositivos móveis, desktop e Xbox.
Observação
O código neste artigo foi adaptado do exemplo UWP Background Audio.
Explicação do modelo de um processo
Com o Windows 10, versão 1607, foi introduzido um novo modelo de processo único que simplifica muito o processo de ativação do áudio em segundo plano. Anteriormente, seu aplicativo era obrigado a gerenciar um processo em segundo plano além do aplicativo em primeiro plano e, em seguida, comunicar manualmente as alterações de estado entre os dois processos. No novo modelo, basta adicionar a capacidade de áudio em segundo plano ao manifesto do aplicativo e o aplicativo continuará a reproduzir áudio automaticamente quando for movido para o plano de fundo. Dois novos eventos do ciclo de vida da aplicação, EnteredBackground e LeavingBackground avisam a sua aplicação quando esta está a entrar e a sair do plano de fundo. Quando seu aplicativo se move para as transições de ou para o plano de fundo, as restrições de memória impostas pelo sistema podem mudar, para que você possa usar esses eventos para verificar seu consumo de memória atual e liberar recursos para ficar abaixo do limite.
Ao eliminar a complexa comunicação entre processos e o gerenciamento de estado, o novo modelo permite que você implemente o áudio em segundo plano muito mais rapidamente com uma redução significativa no código. No entanto, o modelo de dois processos ainda é suportado na versão atual para compatibilidade com versões anteriores. Para obter mais informações, consulte Modelo de áudio de fundo herdado.
Requisitos para áudio de fundo
Seu aplicativo deve atender aos seguintes requisitos para reprodução de áudio enquanto estiver em segundo plano.
- Adicione o recurso de reprodução de mídia em segundo plano ao manifesto do aplicativo, conforme descrito mais adiante neste artigo.
- Se seu aplicativo desabilitar a integração automática do MediaPlayer com os controles de transporte de mídia do sistema (SMTC), como definindo a propriedade CommandManager.IsEnabled como false, você deverá implementar a integração manual com o SMTC para habilitar a reprodução de mídia em segundo plano. Você também deve integrar manualmente com o SMTC se estiver usando uma API diferente do MediaPlayer, como o AudioGraph, para reproduzir áudio se quiser que o áudio continue a ser reproduzido quando seu aplicativo for movido para o plano de fundo. Os requisitos mínimos de integração SMTC são descritos na seção "Utilizar os controlos de transporte de mídia do sistema para áudio de fundo" de Controlos manuais do Sistema de Transporte de Mídia.
- Enquanto seu aplicativo estiver em segundo plano, você deve permanecer abaixo dos limites de uso de memória definidos pelo sistema para aplicativos em segundo plano. A orientação para gerenciar a memória em segundo plano é fornecida mais adiante neste artigo.
Capacidade de reprodução de mídia em segundo plano conforme manifesto
Para habilitar o áudio em segundo plano, você deve adicionar o recurso de reprodução de mídia em segundo plano ao arquivo de manifesto do aplicativo, Package.appxmanifest.
Para adicionar recursos ao manifesto do aplicativo usando o designer de manifesto
- No Microsoft Visual Studio, no Explorador de Soluções, abra o designer do manifesto da aplicação clicando duas vezes no item package.appxmanifest.
- Selecione a guia Recursos .
- Marque a caixa de seleção de reprodução de mídia em segundo plano.
Para definir o recurso editando manualmente o xml do manifesto do aplicativo, primeiro verifique se o prefixo do namespace uap3 está definido no elemento Package . Se não, adicione-o como mostrado abaixo.
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
IgnorableNamespaces="uap uap3 mp">
Em seguida, adicione o
<Capabilities>
<uap3:Capability Name="backgroundMediaPlayback"/>
</Capabilities>
Manipular a transição entre primeiro plano e plano de fundo
Quando a sua aplicação se move do primeiro plano para o plano de fundo, o evento EnteredBackground é acionado. E quando seu aplicativo retorna ao primeiro plano, o evento LeavingBackground é gerado. Como esses são eventos do ciclo de vida do aplicativo, você deve registrar manipuladores para esses eventos quando seu aplicativo for criado. No modelo de projeto padrão, isso significa adicioná-lo ao construtor de classe do
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
this.EnteredBackground += App_EnteredBackground;
this.LeavingBackground += App_LeavingBackground;
}
Crie uma variável para acompanhar se está atualmente em execução em segundo plano.
bool _isInBackgroundMode = false;
Quando o evento EnteredBackground for gerado, configure a variável de acompanhamento para indicar que está atualmente a executar em segundo plano. Você não deve executar tarefas de execução prolongada no evento EnteredBackground, porque isso pode fazer com que a transição para o plano de fundo pareça lenta para o usuário.
private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)
{
_isInBackgroundMode = true;
}
No manipulador de eventos
private void App_LeavingBackground(object sender, LeavingBackgroundEventArgs e)
{
_isInBackgroundMode = false;
}
Requisitos de gerenciamento de memória
A parte mais importante de lidar com a transição entre primeiro plano e plano de fundo é gerenciar a memória que seu aplicativo usa. Como a execução em segundo plano reduzirá os recursos de memória que a sua aplicação tem permissão para reter pelo sistema, também deve registar-se para os eventos AppMemoryUsageIncreased e AppMemoryUsageLimitChanging. Quando esses eventos são gerados, você deve verificar o uso atual de memória do seu aplicativo e o limite atual e, em seguida, reduzir o uso de memória, se necessário. Para obter informações sobre como reduzir o uso de memória durante a execução em segundo plano, consulte Liberar memória quando seu aplicativo é movido para o plano de fundo.
Disponibilidade de rede para aplicativos de mídia em segundo plano
Todas as fontes de mídia conscientes da rede, aquelas que não são criadas a partir de streaming ou um arquivo, manterão a conexão de rede ativa enquanto recuperam conteúdo remoto e desativam a conexão de rede quando não estão a recuperar conteúdo remoto. MediaStreamSource, especificamente, depende do aplicativo para relatar corretamente o intervalo de buffer correto para a plataforma usando SetBufferedRange. Depois que todo o conteúdo estiver totalmente armazenado em buffer, a rede não será mais reservada em nome do aplicativo.
Se você precisar fazer chamadas de rede que ocorrem em segundo plano quando a mídia não está sendo baixada, elas devem ser encapsuladas em uma tarefa apropriada como MaintenanceTrigger ou TimeTrigger. Para obter mais informações, consulte Ofereça suporte à sua aplicação com tarefas em segundo plano.
Tópicos relacionados
- Reprodução de multimédia
- Reproduza áudio e vídeo com o MediaPlayer
- Integrar com os controles de transporte de mídia do sistema
- Amostra de áudio de fundo