Partilhar via


Detetar e reagir ao estado da sessão de foco

O Windows 11 introduziu a funcionalidade de Concentração, que ajuda os utilizadores a minimizar distrações ao ativar o modo Não Perturbe e silenciando a cintilação de ícones e as notificações de emblema para aplicações na barra de tarefas. Este artigo mostra como usar a API do FocusSessionManager para detetar se uma sessão do Focus está ativa no momento ou receber atualizações quando o estado da sessão do Focus muda, permitindo que você personalize o comportamento do seu aplicativo para minimizar distrações quando uma sessão do Focus estiver ativa. Para obter mais informações sobre o recurso Foco, consulte Como usar o foco no Windows 11.

Obter o estado atual da sessão do Focus

Antes de acessar as propriedades do FocusSessionManager, verifique se ele é suportado no dispositivo atual verificando a propriedade IsSupported . Depois de verificar se o recurso é suportado, você pode determinar se uma sessão Focus está ativa no momento verificando a propriedade IsFocusActive .

private void UpdateStatusBar(string message)
{
    var focusActive = false;
    if (Windows.UI.Shell.FocusSessionManager.IsSupported)
    {
        var manager = Windows.UI.Shell.FocusSessionManager.GetDefault();
        focusActive = manager.IsFocusActive;
    }

    if (!focusActive)
    {
        statusTextBlock.Text = message;
    }
}

Monitore continuamente o estado do foco

Você pode se inscrever para ser notificado quando o estado da sessão Focus no dispositivo for alterado registrando-se para o evento IsFocusActiveChanged . No exemplo a seguir, SetAnimatedGifAutoPlay é um método auxiliar implementado pelo aplicativo que altera se o aplicativo reproduz automaticamente gifs animados com base no estado atual da sessão Focus.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (Windows.UI.Shell.FocusSessionManager.IsSupported)
    {
        var manager = Windows.UI.Shell.FocusSessionManager.GetDefault();
        manager.IsFocusActiveChanged += Manager_IsFocusActiveChanged;
        SetAnimatedGifAutoPlay(true);
    }
}

private void Manager_IsFocusActiveChanged(Windows.UI.Shell.FocusSessionManager sender, object args)
{
    if(sender.IsFocusActive)
    {
        SetAnimatedGifAutoPlay(true);
    }
    else
    {
        SetAnimatedGifAutoPlay(false);
    }
}