在使用MAUI开发跨平台应用时,控制屏幕常亮是不少场景下的刚需,比如视频播放、运动计时、实时导航等场景,都需要避免设备自动锁屏熄灭。MAUI框架内置了DeviceDisplay相关API,能够直接实现屏幕常亮的控制,无需针对不同平台编写复杂的原生代码。

MAUI屏幕常亮的核心API
MAUI中实现屏幕常亮主要依赖DeviceDisplay类的KeepScreenOn属性,该属性属于Microsoft.Maui.Devices命名空间,是一个布尔类型的可读写属性。将其设置为true时,设备屏幕会保持常亮,设置为false时则恢复系统默认的自动熄屏策略。
基础使用方式
最简单的使用方式是在需要开启屏幕常亮的页面生命周期中设置该属性,比如在页面显示时开启,页面隐藏时关闭,避免不必要的电量消耗。
using Microsoft.Maui.Devices;
using Microsoft.Maui.Controls;
namespace MauiScreenOnDemo;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
// 开启屏幕常亮
DeviceDisplay.KeepScreenOn = true;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
// 关闭屏幕常亮,恢复默认策略
DeviceDisplay.KeepScreenOn = false;
}
}
带条件控制的屏幕常亮实现
实际开发中通常需要更灵活的控制逻辑,比如用户手动切换常亮开关,或者根据应用内的业务状态动态控制。以下是一个带手动开关的示例:
using Microsoft.Maui.Devices;
using Microsoft.Maui.Controls;
namespace MauiScreenOnDemo;
public partial class ControlPage : ContentPage
{
public ControlPage()
{
InitializeComponent();
// 初始化开关状态与当前KeepScreenOn属性同步
KeepScreenSwitch.IsToggled = DeviceDisplay.KeepScreenOn;
}
private void KeepScreenSwitch_Toggled(object sender, ToggledEventArgs e)
{
// 根据开关状态设置屏幕常亮属性
DeviceDisplay.KeepScreenOn = e.Value;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
// 页面退出时恢复默认熄屏策略,避免影响其他应用
DeviceDisplay.KeepScreenOn = false;
}
}
对应的XAML页面代码如下:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiScreenOnDemo.ControlPage"
Title="屏幕常亮控制">
<VerticalStackLayout Spacing="20" Padding="20" VerticalOptions="Center">
<Label Text="屏幕常亮控制" FontSize="24" HorizontalOptions="Center" />
<Switch x:Name="KeepScreenSwitch"
Toggled="KeepScreenSwitch_Toggled"
HorizontalOptions="Center" />
<Label x:Name="StatusLabel"
Text="当前状态:屏幕常亮已关闭"
HorizontalOptions="Center">
<Label.Triggers>
<DataTrigger TargetType="Label"
Binding="{Binding Source={x:Reference KeepScreenSwitch}, Path=IsToggled}"
Value="True">
<Setter Property="Text" Value="当前状态:屏幕常亮已开启" />
</DataTrigger>
</Label.Triggers>
</Label>
</VerticalStackLayout>
</ContentPage>
不同平台的注意事项
虽然MAUI的DeviceDisplay API做了跨平台封装,但不同系统下仍有需要注意的细节:
- Android平台:需要确保应用有唤醒锁的相关权限吗?实际上MAUI已经内置处理了相关权限申请,无需开发者手动在AndroidManifest.xml中添加额外权限。
- iOS平台:该API在iOS上的实现依赖于系统提供的空闲计时器禁用接口,在应用进入后台时,系统会强制恢复默认熄屏策略,这是iOS系统的安全限制,无法绕过。
- Windows平台:支持该属性,但仅在应用处于前台窗口时生效,应用最小化后同样会恢复系统默认熄屏策略。
- MacCatalyst平台:行为和iOS一致,应用进入后台后屏幕常亮设置会失效。
常见问题排查
如果设置DeviceDisplay.KeepScreenOn = true后屏幕仍然自动熄灭,可以按照以下步骤排查:
- 检查代码是否在正确的生命周期调用,比如是否在页面OnAppearing之后设置,避免设置被后续逻辑覆盖。
- 确认应用是否处于前台运行状态,部分平台下后台运行时该设置不生效。
- 检查是否有其他代码在后续逻辑中将
KeepScreenOn重新设置为了false。 - 如果是Android平台,检查系统是否开启了电池优化,部分系统的电池优化策略会忽略应用的唤醒锁请求。
注意:屏幕常亮会增加设备电量消耗,建议在不需要常亮的场景及时将KeepScreenOn设置为false,提升用户体验和设备续航。
MAUIDeviceDisplayKeepScreenOn屏幕常亮修改时间:2026-06-27 22:27:36