다음을 통해 공유


포커스 세션 상태 감지 및 대응

Windows 11에서는 사용자가 방해를 최소화할 수 있도록 방해 금지 모드를 켜고 작업 표시줄의 앱에서 아이콘 깜박임과 배지 알림을 표시하지 않도록 하는 포커스 기능을 도입했습니다. 이 문서에서는 FocusSessionManager API를 사용하여 포커스 세션 상태가 변경될 때 포커스 세션이 현재 활성 상태인지 또는 업데이트를 수신하는지 감지하는 방법을 보여 줍니다. 이를 통해 포커스 세션이 활성 상태일 때 방해를 최소화하도록 앱의 동작을 사용자 지정할 수 있습니다. 포커스 기능에 대한 자세한 내용은 Windows 11에서 포커스를 사용하는 방법을 참조하세요.

현재 포커스 세션 상태 가져오기

FocusSessionManager의 속성에 액세스하기 전에 IsSupported 속성을 확인하여 현재 디바이스에서 지원되는지 확인합니다. 기능이 지원되는지 확인한 후 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;
    }
}

포커스 상태를 지속적으로 모니터링

IsFocusActiveChanged 이벤트에 등록하여 디바이스의 포커스 세션 상태가 변경될 때 알림을 구독할 수 있습니다. 다음 예제에서 SetAnimatedGifAutoPlay는 현재 포커스 세션 상태에 따라 앱이 애니메이션 GIF를 자동 재생할지를 변경하는 앱 구현 도우미 메서드입니다.

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);
    }
}