Ciertas apps necesitan mantener la pantalla encendida, como las apps de juegos o de cine. Algunas APIs de Android mantienen la pantalla encendida automáticamente. En otros casos, puedes usar un modificador de Compose o establecer una marca para mantener la pantalla encendida de forma manual.
Cómo mantener la pantalla encendida en Compose
Si tu app usa Jetpack Compose, aplica el modificador keepScreenOn a un elemento componible. El modificador está disponible en Compose UI 1.9.0 y versiones posteriores. La pantalla permanece encendida mientras el modificador forme parte de la composición. Cuando ningún elemento componible usa el modificador, Compose deja de mantener la pantalla encendida automáticamente.
Para mantener la pantalla encendida solo durante un tiempo, aplica el modificador de forma condicional. En el siguiente ejemplo, se mantiene la pantalla encendida solo mientras se reproduce un video:
@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. } }
El modificador establece la misma propiedad de vista que el atributo android:keepScreenOn que se describe en la siguiente sección, por lo que mantiene la pantalla encendida solo mientras la ventana de tu app está visible. No borra una marca FLAG_KEEP_SCREEN_ON que tu app establece en la ventana.
Mantén la pantalla encendida de forma manual
Para mantener encendida la pantalla del dispositivo, establece la marca FLAG_KEEP_SCREEN_ON en tu actividad. Esta marca solo se puede establecer en una actividad, nunca en un servicio ni en otro componente de la app. Por ejemplo:
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Otra forma de mantener la pantalla encendida es configurar el atributo android:keepScreenOn en el archivo XML de diseño de tu aplicación:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Usar android:keepScreenOn="true" equivale a usar FLAG_KEEP_SCREEN_ON.
Puedes usar el enfoque que mejor se adapte a tu app. La ventaja de configurar la marca de manera programática en tu actividad es que te brinda la opción de borrarla de manera programática más adelante y, así, permitir que la pantalla se apague.
Si una app con la marca FLAG_KEEP_SCREEN_ON pasa a segundo plano, el sistema permite que la pantalla se apague normalmente. En este caso, no es necesario que borres la marca de forma explícita. Si tu app ya no necesita mantener la pantalla encendida, debes borrar la marca llamando a clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).
Modo ambiente para TV
En dispositivos de TV, usa FLAG_KEEP_SCREEN_ON para evitar que el dispositivo entre en el Modo ambiente durante la reproducción activa de videos. Si la actividad en primer plano no establece FLAG_KEEP_SCREEN_ON, el dispositivo ingresa automáticamente al modo ambiente después de un período de inactividad.