Некоторым приложениям, например играм или видеопроигрывателям, требуется, чтобы экран не отключался. Некоторые API Android автоматически поддерживают экран включенным. В других случаях вы можете использовать модификатор Compose или установить флаг, чтобы вручную оставить экран включенным.
Как не выключать экран в Compose
Если в вашем приложении используется Jetpack Compose, примените модификатор keepScreenOn к composable-функции. Модификатор доступен в Compose UI 1.9.0 и более поздних версиях. Экран будет оставаться включенным, пока модификатор является частью композиции. Когда ни одна composable-функция не использует модификатор, 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, установленный приложением для окна, не сбрасывается.
Как вручную настроить, чтобы экран не отключался
Чтобы экран устройства не отключался, установите флаг FLAG_KEEP_SCREEN_ON в действии. Этот флаг можно установить только в действии, но не в сервисе или другом компоненте приложения. Пример:
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Другой способ – задать атрибут android:keepScreenOn в XML-файле макета приложения:
<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.
Вы можете использовать любой подход, который лучше всего подходит для вашего приложения. Преимущество программной установки флага в вашей активности заключается в том, что она дает вам возможность программно очистить флаг позже и тем самым позволить экрану выключиться.
Если приложение с флагом FLAG_KEEP_SCREEN_ON переходит в фоновый режим, система позволяет экрану выключиться в обычном режиме. В этом случае вам не нужно явно снимать флажок. Если приложению больше не нужно держать экран включенным, очистите флаг, вызвав clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).
Спящий режим для телевизора
На телевизорах используйте FLAG_KEEP_SCREEN_ON, чтобы устройство не переходило в спящий режим во время воспроизведения видео. Если для активного действия не задано свойство FLAG_KEEP_SCREEN_ON, устройство автоматически переходит в спящий режим после периода бездействия.