我熟悉许多文档,他们都在谈论如何在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();
}
}