使屏幕保持开启状态

某些应用(例如游戏或电影应用)需要保持屏幕开启。 某些 Android API 会自动让屏幕保持开启状态。在其他情况下,您可以使用 Compose 修饰符或设置标志来手动使屏幕保持开启状态。

在 Compose 中让屏幕保持开启状态

如果您的应用使用 Jetpack Compose,请将 keepScreenOn 修饰符应用于可组合项。此修饰符在 Compose UI 1.9.0 及更高版本中可用。只要修饰符是组合的一部分,屏幕就会保持开启状态。当没有可组合项使用该修饰符时,Compose 会自动停止让屏幕保持开启状态。

如需仅在部分时间让屏幕保持开启状态,请有条件地应用修饰符。 以下示例仅在视频播放期间保持屏幕开启:

@Composable
fun VideoPlayer(isPlaying: Boolean, modifier: Modifier = Modifier) {
    Box(
        modifier = modifier
            // Keep the screen on only while the video plays.
            .then(if (isPlaying) Modifier.keepScreenOn() else Modifier)
    ) {
        // Video surface and playback controls.
    }
}

该修饰符设置的视图属性与下一部分中介绍的 android:keepScreenOn 属性相同,因此只有在应用窗口可见时,它才会使屏幕保持开启状态。它不会清除您的应用在窗口上设置的 FLAG_KEEP_SCREEN_ON 标志。

手动让屏幕保持开启状态

如需让设备屏幕保持开启状态,请在 activity 中设置 FLAG_KEEP_SCREEN_ON 标志。此标志只能在 activity 中设置,而不能在服务或其他应用组件中设置。例如:

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}

另一种保持屏幕开启的方法是在应用的布局 XML 文件中设置 android:keepScreenOn 属性:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>

使用 android:keepScreenOn="true" 相当于使用 FLAG_KEEP_SCREEN_ON。您可以采用最适合您应用的方法。在 activity 中以编程方式设置标志的优势在于,您可以选择稍后以编程方式清除标志,从而允许屏幕关闭。

如果具有 FLAG_KEEP_SCREEN_ON 标志的应用进入后台,系统会允许屏幕正常关闭。在这种情况下,您无需明确清除该标志。如果您的应用不再需要保持屏幕开启,您应通过调用 clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) 清除该标志。

电视氛围模式

在 TV 设备上,使用 FLAG_KEEP_SCREEN_ON 可防止设备在主动播放视频期间进入氛围模式。如果前台 activity 未设置 FLAG_KEEP_SCREEN_ON,设备会在一段时间不活动后自动进入氛围模式。

另请参阅