Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como configurar seu aplicativo para que a mídia continue sendo reproduzida quando seu aplicativo passa 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 longe do seu aplicativo de alguma outra maneira, seu aplicativo pode continuar reproduzindo áudio.
Os cenários de reprodução de áudio em segundo plano incluem:
Playlists de longa duração: O usuário abre brevemente um aplicativo em primeiro plano para selecionar e iniciar uma playlist, esperando que esta continue a ser reproduzida em segundo plano.
Usando o comutador 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 comutador 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 Mobile, Desktop e Xbox.
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 habilitação do áudio em segundo plano. Anteriormente, seu aplicativo era necessário para gerenciar um processo em segundo plano, além de seu aplicativo em primeiro plano e, em seguida, comunicar manualmente as alterações de estado entre os dois processos. No novo modelo, basta adicionar a funcionalidade de áudio em segundo plano ao manifesto do aplicativo e seu aplicativo continuará reproduzindo áudio automaticamente quando ele for movido para o segundo plano. Dois novos eventos de ciclo de vida do aplicativo, EntrouEmSegundoPlano e SaindoDoSegundoPlano permitem informar ao seu aplicativo quando ele está entrando e deixando o plano de fundo. Quando seu aplicativo se move para as transições de ou para o segundo plano, as restrições de memória impostas pelo sistema podem ser alteradas, para que você possa usar esses eventos para verificar o 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 por questões de compatibilidade retroativa. Para mais informações, consulte o modelo legado de áudio em segundo plano .
Requisitos para áudio em segundo plano
Seu aplicativo deve atender aos requisitos a seguir para reprodução de áudio enquanto seu aplicativo está em segundo plano.
- Adicione a funcionalidade de Reprodução de Mídia em Segundo Plano ao manifesto do aplicativo, conforme descrito mais adiante neste artigo.
- Se o 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 ao SMTC se estiver usando uma API diferente de MediaPlayer, como AudioGraph, para reproduzir áudio, caso deseje que o áudio continue a ser reproduzido quando o seu aplicativo for movido para o segundo plano. Os requisitos mínimos de integração do SMTC são descritos na seção "Usar os controles de transporte de mídia do sistema para áudio em segundo plano" do "Manual de Controle dos Controles de Transporte de Mídia do Sistema".
- Embora seu aplicativo esteja em segundo plano, você deve ficar abaixo dos limites de uso de memória definidos pelo sistema para aplicativos em segundo plano. As diretrizes para gerenciar a memória em segundo plano são fornecidas posteriormente neste artigo.
Funcionalidade de reprodução de mídia em segundo plano no manifesto
Para habilitar o áudio em segundo plano, você deve adicionar a funcionalidade de reprodução de mídia em segundo plano ao arquivo de manifesto do aplicativo, Package.appxmanifest.
Adicionar recursos ao manifesto do aplicativo usando o designer de manifesto
- No Microsoft Visual Studio, no Gerenciador de Soluções , abra o designer do manifesto do aplicativo com um duplo clique no item package.appxmanifest.
- Selecione a guia Recursos .
- Selecione a caixa de seleção Reprodução de Mídia em Segundo Plano.
Para definir a funcionalidade editando manualmente o xml do manifesto do aplicativo, primeiro verifique se o prefixo uap3 namespace está definido no elemento Package. Caso contrário, adicione-o conforme 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 a capacidade de backgroundMediaPlayback ao elemento Capacidades:
<Capabilities>
<uap3:Capability Name="backgroundMediaPlayback"/>
</Capabilities>
Manipular a transição entre o primeiro plano e o plano de fundo
Quando o aplicativo muda do primeiro plano para o segundo plano, o evento EnteredBackground é gerado. E quando seu aplicativo retorna ao primeiro plano, o evento LeavingBackground é gerado. Como esses são eventos de ciclo de vida do aplicativo, você deve registrar manipuladores para esses eventos quando seu aplicativo é criado. No modelo de projeto padrão, isso significa adicioná-lo ao construtor da classe App no App.xaml.cs.
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
this.EnteredBackground += App_EnteredBackground;
this.LeavingBackground += App_LeavingBackground;
}
Crie uma variável para indicar se você está em execução em segundo plano.
bool _isInBackgroundMode = false;
Quando o evento EnteredBackground for acionado, defina a variável de acompanhamento indicando que está operando em segundo plano. Você não deve executar tarefas de execução longa no evento EnteredBackground porque isso pode fazer com que a transição para a tela de fundo pareça lenta para o usuário.
private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)
{
_isInBackgroundMode = true;
}
No manipulador de eventos LeavingBackground, você deve definir a variável de acompanhamento para indicar que seu aplicativo não está mais em execução em segundo plano.
private void App_LeavingBackground(object sender, LeavingBackgroundEventArgs e)
{
_isInBackgroundMode = false;
}
Requisitos de gerenciamento de memória
A parte mais importante do tratamento da transição entre o primeiro plano e a tela de fundo é gerenciar a memória que seu aplicativo usa. Como a execução em segundo plano reduzirá os recursos de memória que seu aplicativo pode reter pelo sistema, você também deve se registrar para os eventos AppMemoryUsageIncreased e AppMemoryUsageLimitChanging. Quando esses eventos forem gerados, você deverá verificar o uso atual de memória do 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 Memória livre quando o aplicativo for movido para o plano de fundo.
Disponibilidade de rede para aplicativos de mídia em segundo plano
Todas as fontes de mídia conectadas à rede, aquelas que não são criadas a partir de um fluxo ou de um arquivo, manterão a conexão de rede ativa durante a recuperação de conteúdo remoto e a liberarão quando não estiverem. MediaStreamSource, especificamente, depende do aplicativo para relatar corretamente o intervalo em buffer correto para a plataforma usando SetBufferedRange. Depois que todo o conteúdo for totalmente armazenado em buffer, a rede não será mais reservada em nome do aplicativo.
Se você precisar fazer chamadas de rede que ocorram em segundo plano quando a mídia não estiver baixando, elas deverão ser encapsuladas em uma tarefa apropriada, como MaintenanceTrigger ou TimeTrigger. Para obter mais informações, consulte Preste suporte ao aplicativo com tarefas em segundo plano.
Tópicos relacionados
- Reprodução de mídia
- Reproduzir áudio e vídeo com o MediaPlayer
- integrar com os controles de transporte de mídia do sistema
- Amostra de áudio em segundo plano