Compartilhar via


Detectar e reagir ao estado da sessão de foco

O Windows 11 introduziu o recurso Foco que ajuda os usuários a minimizar as distrações ativando o ícone Não Incomodar e silenciando notificações de ícones e selos para aplicativos na barra de tarefas. Este artigo mostra como usar a API FocusSessionManager para detectar se uma sessão de Foco está ativa no momento ou receber atualizações quando o estado da sessão Focus é alterado, permitindo que você personalize o comportamento do aplicativo para minimizar distrações quando uma sessão de Foco 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 de Foco

Antes de acessar as propriedades do FocusSessionManager, verifique se ele é compatível com o dispositivo atual conferindo a propriedade IsSupported. Depois de verificar se o recurso tem suporte, você pode determinar se uma sessão de Foco 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;
    }
}

Monitorar continuamente o estado de foco

Você pode se inscrever para ser notificado quando o estado da sessão Focus no dispositivo mudar, registrando-se no evento IsFocusActiveChanged. No exemplo a seguir , SetAnimatedGifAutoPlay é um método auxiliar implementado pelo aplicativo que altera se o aplicativo reproduz gifs animados automaticamente 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);
    }
}