UWP: Как предотвратить блокировку экрана в полноэкранном режиме? - PullRequest
0 голосов
/ 13 октября 2018

Я знаком со многими документами, в которых говорится о том, как предотвратить гашение экрана во время работы приложения UWP (например, в этой статье ).И это прекрасно работает в моем приложении, за исключением случаев, когда я перевожу свое приложение в полноэкранный режим, используя метод ApplicationView.TryEnterFullScreenMode .Когда приложение работает в полноэкранном режиме, экран будет пустым после стольких минут простоя (в зависимости от настроек Windows).Как я могу предотвратить блокировку / блокировку экрана, когда приложение находится в полноэкранном режиме?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

После дальнейшего изучения этого, вот что я нашел:

Если приложение уже вызвало DisplayRequest.RequestActive и , тогда переходит в полноэкранный режим (вызов ApplicationView.TryEnterFullScreenMode), то это НЕ работает.(Другими словами, приложение не будет препятствовать сну.)

Если приложение уже вызвало DisplayRequest.RequestActive, то переходит в полноэкранный режим, затем пытается снова вызвать DisplayRequest.RequestActive, это все еще НЕ работает.

Но, если приложение уже вызвало DisplayRequest.RequestActive и когда оно хочет перейти в полноэкранный режим, вызовет DisplayRequest.RequestRelease перед вызовом ApplicationView.TryEnterFullScreenMode и затем вызовет DisplayRequest.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;
}

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();
    }
}
0 голосов
/ 15 октября 2018

Я тестировал 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...