UWP: BrightnessOverride StartOverride logic

只愿长相守 提交于 2019-12-04 10:01:41

I have found out experimentally, that the BrightnessOverride.GetForCurrentView() returns a new BrightnessOverride instance each time it is called. One evidence of this is the fact that even though you add new event handlers to the instance each time the method is called, the output appears only once.

This now means, that when you call the method multiple times, you create several BrightnessOverride instances each with its own value. I think that because the API is usually used to make the screen brighter when someone is scanning a voucher code from your screen, when a lower brightness override comes while another high brightness override is active, it is ignored (to keep honoring the high brightness request).

If you want to change the brightness to any value, you just have to make sure you are reusing the first instance you have retrieved from GetForCurrentView call, because by setting a new brightness on that instance, you will "cancel" the original request.

private BrightnessOverride brightnessOverride = null;

private void InitializeBrightnessOverride()
{
    brightnessOverride = BrightnessOverride.GetForCurrentView();
    Debug.WriteLine($"Try to change brightness from {brightnessOverride.BrightnessLevel} to {brightness}");

    void overrideActiveChangedHandler(BrightnessOverride sender, object e)
    {
        sender.IsOverrideActiveChanged -= overrideActiveChangedHandler;
        Debug.WriteLine($"BrightnessOverride IsOverrideActive changed to {sender.IsOverrideActive}");
    }

    void brightnessLevelChangedHandler(BrightnessOverride sender, object e)
    {
        sender.BrightnessLevelChanged -= brightnessLevelChangedHandler;
        Debug.WriteLine($"BrightnessOverride BrightnessLevel changed to {sender.BrightnessLevel}");
    }

    brightnessOverride.IsOverrideActiveChanged += overrideActiveChangedHandler;
    brightnessOverride.BrightnessLevelChanged += brightnessLevelChangedHandler;
}

protected override void ApplyBrightness(double brightness)
{
    brightnessOverride.SetBrightnessLevel(brightness, DisplayBrightnessOverrideOptions.None);

    brightnessOverride.StartOverride();
}

Now you can call:

InitializeBrightnessOverride();
ApplyBrightness(0.7);
ApplyBrightness(0.14);

Just reusing the instance is enough to make this work. Also as a tip - to return the screen to the original brightness, you can call StopOverride.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!