UWP C++:如何在后台任务中切换自适应亮度
问题梳理
已实现后台任务中获取BrightnessOverride实例:
aaa_bo = BrightnessOverride::GetDefaultForSystem();// 在VS和手机端均可正常运行可通过BackgroundTask.exe设置屏幕亮度,但不清楚如何开启/关闭自适应亮度
尝试自定义NullObject类调用
SaveForSystemAsync时触发编译错误:aa_OBJ_BO->SaveForSystemAsync(NullObject());错误信息:
Error C2664 'Windows::Foundation::IAsyncOperation
^Windows::Graphics::Display::BrightnessOverride::SaveForSystemAsync(Windows::Graphics::Display::BrightnessOverride ^)': cannot convert argument 1 from 'BackgroundTask::NullObject' to 'Windows::Graphics::Display::BrightnessOverride ^' BackgroundTask 554 1 Build 自定义类代码:
private ref class ClsDummy { public: virtual ~ClsDummy() {}; virtual void MakeSound() {}; }; //Windows::Graphics::Display::BrightnessOverride^ private ref class NullObject sealed : public ClsDummy { public: //virtual void MakeSound() const override {}; virtual void MakeSound() override {}; };
解决方法
1. 编译错误修复
你创建的NullObject类继承自自定义的ClsDummy,与BrightnessOverride类型完全不兼容,导致参数类型转换失败。不需要自定义空对象,若要恢复系统自适应亮度,直接调用官方提供的方法即可。
2. 开启/关闭自适应亮度的正确方式
关闭自适应亮度(强制固定亮度)
通过BrightnessOverride设置固定亮度级别或亮度场景,然后保存覆盖设置:
// 获取BrightnessOverride实例 auto bo = BrightnessOverride::GetDefaultForSystem(); // 设置固定亮度(0.0到1.0之间,1.0为最高亮度) bo->SetBrightnessLevel(0.8f, DisplayBrightnessOverrideOptions::None); // 保存设置,覆盖系统自适应亮度 create_task(bo->SaveForSystemAsync(bo)).then([](bool success) { if (success) { // 设置成功 } });
开启自适应亮度(恢复系统默认)
调用ClearBrightnessOverrideAsync方法清除亮度覆盖,系统会自动恢复自适应亮度:
auto bo = BrightnessOverride::GetDefaultForSystem(); create_task(bo->ClearBrightnessOverrideAsync()).then([](bool success) { if (success) { // 已恢复自适应亮度 } });
或者也可以通过传递nullptr给SaveForSystemAsync来清除覆盖:
auto bo = BrightnessOverride::GetDefaultForSystem(); create_task(bo->SaveForSystemAsync(nullptr)).then([](bool success) { if (success) { // 已恢复自适应亮度 } });
内容的提问来源于stack exchange,提问作者Pacala_ba

