我希望能够通过使用DisplayRequest类来阻止屏幕保护程序在我的应用程序使用时触发,但我只想在活动应用程序时执行此操作.如果用户切换到另一个窗口/应用程序,那么我想像一个好公民,并再次允许屏幕保护程序.
我无法看到一种明显的方法来检测UWP应用何时获得/失去焦点(或被激活/停用)并且快速搜索并不能提供任何见解.谁能指出我正确的方向?
Tam*_*eme 13
它实际上非常简单:
Window.Current.Activated += Current_Activated;
private void Current_Activated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
{
    if (e.WindowActivationState == CoreWindowActivationState.Deactivated)
    {
        // do stuff
    }
    else
    {
        // do different stuff
    }
}
我们可以使用CoreWindow.Activated事件来检测何时激活或停用UWP应用程序.当窗口完成激活或取消激活时,将触发此方法.对于UWP应用程序,我们通常只有一个窗口.所以我们可以在Application.OnLaunched方法中添加一些像以下代码来检测:
Window.Current.CoreWindow.Activated += (sender, args) =>
{
    if (args.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated)
    {
        System.Diagnostics.Debug.WriteLine("Deactivated " + DateTime.Now);
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("Activated " + DateTime.Now);
    }
};
除此之外,您还可以使用CoreApplication.GetCurrentView方法或CoreWindow.GetForCurrentThread方法来获取CoreWindow.
您不应处理应用程序激活状态的更改。
自动请求处理
但是,如果没有任何额外的编码,当您的应用程序不再具有焦点时,您的 RequestActive() 调用也将被停用 - 换句话说,当您的应用程序进入暂停状态时。在 Windows Phone 手机和平板电脑模式下的 Windows 10 PC 或 Surface Pro 上,“你的应用程序不再具有焦点”意味着你的应用程序不再处于前台(顺便说一下,被捕捉的应用程序仍然算作处于前台) . 但是,在桌面模式下的 Windows 10 PC 上,这意味着只要您的应用程序被最小化。在桌面模式下,请注意,即使另一个应用程序窗口覆盖了您的应用程序窗口,您的应用程序仍会被 UWP 应用程序生命周期视为在前台运行。
真正酷的是,当您的应用程序回到前台或被最小化时,RequestActive() 调用将自动重新激活。你什么都不用做!
这也意味着,如果另一个应用程序碰巧请求保持显示处于活动状态,则它无法劫持同一设备上所有其他应用程序的行为。只要用户正在使用该应用程序,该请求就是好的。一旦应用被关闭或最小化,即使应用忘记调用 RequestRelease(),Windows 10 也会恢复到其常规的节能习惯。
最后,当您的应用程序终止时,所有剩余的显示活动请求都会自动为您清除。
这一切都是为了您的需要。
| 归档时间: | 
 | 
| 查看次数: | 4664 次 | 
| 最近记录: |