UWP:在全屏模式下,如何防止屏幕锁定



我熟悉许多文档,他们都在谈论如何在UWP应用程序处于活动状态时防止屏幕空白(如本文)。它在我的应用程序中运行得很好,除了当我使用ApplicationView.TryEnterFullScreenMode方法将应用程序置于全屏模式时。当应用程序全屏显示时,经过几分钟的空闲时间(取决于Windows设置),屏幕将变为空白。当应用程序处于全屏模式时,我如何防止屏幕锁定/消隐?

我已经在全屏模式下测试了RequestActive,它也工作得很好。为了确保您已经调用了RequestActive方法,您可以定义bool_isRequest来维护RequestActive()被调用。

private bool _isRequest;
public void ActivateDisplay()
{
//create the request instance if needed
if (_displayRequest == null)
_displayRequest = new Windows.System.Display.DisplayRequest();
//make request to put in active state
_displayRequest.RequestActive();
_isRequest = true;
info.Text = _isRequest.ToString();
}
public void ReleaseDisplay()
{
//must be same instance, so quit if it doesn't exist
if (_displayRequest != null && _isRequest)
{
_displayRequest.RequestRelease();
_isRequest = false;
info.Text = _isRequest.ToString();
}
else return;
}

经过进一步的研究,以下是我的发现:

如果应用程序已经调用了DisplayRequest.RequestActive,则进入全屏模式(调用ApplicationView.TryEnterFullScreenMode),则它不起作用。(换句话说,该应用程序不会阻止睡眠的发生。)

如果应用程序已经调用了DisplayRequest.RequestActive,然后进入全屏模式,然后再次尝试调用DisplayRequest.RequestActive,则仍然不起作用。

但是,如果应用程序已经调用了DisplayRequest.RequestActive,并且当它想进入全屏模式时,在调用ApplicationView.TryEnterFullScreenMode之前调用DisplayRequest.RequestRelease,然后在进入全屏模式之后调用DisplayRequest.RequestActive,那么它确实可以工作。

退出全屏模式时也是如此。

因此,对Nico代码的更改将起作用:

private bool _isRequest;
public void ActivateDisplay()
{
//create the request instance if needed
if (_displayRequest == null)
_displayRequest = new Windows.System.Display.DisplayRequest();
//make request to put in active state
_displayRequest.RequestActive();
_isRequest = true;
info.Text = _isRequest.ToString();
}
public void ReleaseDisplay()
{
//must be same instance, so quit if it doesn't exist
if (_displayRequest != null && _isRequest)
{
_displayRequest.RequestRelease();
_isRequest = false;
info.Text = _isRequest.ToString();
}
else return;
}
public void EnterFullScreen()
{
ApplicationView applicationView = ApplicationView.GetForCurrentView();
applicationView.FullScreenSystemOverlayMode = FullScreenSystemOverlayMode.Minimal;
bool wasRequest = _isRequest;
if (wasRequest)
{
ReleaseDisplay();
}
applicationView.TryEnterFullScreenMode();
if (wasRequest)
{
ActivateDisplay();
}
}
public void ExitFullScreen()
{
ApplicationView applicationView = ApplicationView.GetForCurrentView();
applicationView.FullScreenSystemOverlayMode = FullScreenSystemOverlayMode.Standard;
bool wasRequest = _isRequest;
if (wasRequest)
{
ReleaseDisplay();
}
applicationView.ExitFullScreenMode();
if (wasRequest)
{
ActivateDisplay();
}
}

最新更新