Gardez l'écran allumé

Certaines applications, comme les jeux ou les applications de films, doivent maintenir l'écran allumé. Certaines API Android maintiennent automatiquement l'écran allumé. Dans d'autres cas, vous pouvez utiliser un modificateur Compose ou définir un indicateur pour maintenir l'écran allumé manuellement.

Garder l'écran allumé dans Compose

Si votre application utilise Jetpack Compose, appliquez le modificateur keepScreenOn à un composable. Le modificateur est disponible dans Compose UI 1.9.0 et versions ultérieures. L'écran reste allumé tant que le modificateur fait partie de la composition. Lorsqu'aucun composable n'utilise le modificateur, Compose cesse automatiquement de maintenir l'écran allumé.

Pour que l'écran ne reste allumé que de temps en temps, appliquez le modificateur de manière conditionnelle. L'exemple suivant maintient l'écran allumé uniquement pendant la lecture d'une vidéo :

@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.
    }
}

Le modificateur définit la même propriété d'affichage que l'attribut android:keepScreenOn décrit dans la section suivante. Il ne maintient donc l'écran allumé que lorsque la fenêtre de votre application est visible. Il n'efface pas l'indicateur FLAG_KEEP_SCREEN_ON que votre application définit sur la fenêtre.

Garder l'écran allumé manuellement

Pour que l'écran de l'appareil reste allumé, définissez l'indicateur FLAG_KEEP_SCREEN_ON dans votre activité. Cette option ne peut être définie que dans une activité, jamais dans un service ni dans un autre composant d'application. Exemple :

class MainActivity : Activity() {

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

Vous pouvez également laisser l'écran allumé en définissant l'attribut android:keepScreenOn dans le fichier XML de mise en page de votre application :

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

L'utilisation de android:keepScreenOn="true" équivaut à l'utilisation de FLAG_KEEP_SCREEN_ON. Vous pouvez utiliser l'approche la plus adaptée à votre application. L'avantage de définir l'indicateur de manière programmatique dans votre activité est que vous pouvez l'effacer de manière programmatique ultérieurement, ce qui permet à l'écran de s'éteindre.

Si une application avec l'indicateur FLAG_KEEP_SCREEN_ON passe en arrière-plan, le système autorise l'écran à s'éteindre normalement. Dans ce cas, vous n'avez pas besoin d'effacer explicitement l'indicateur. Si votre application n'a plus besoin de garder l'écran allumé, vous devez effacer l'indicateur en appelant clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).

Mode ambiant pour la TV

Sur les téléviseurs, utilisez FLAG_KEEP_SCREEN_ON pour empêcher l'appareil de passer en mode Veille pendant la lecture d'une vidéo. Si l'activité de premier plan ne définit pas FLAG_KEEP_SCREEN_ON, l'appareil passe automatiquement en mode ambiant après une période d'inactivité.

Voir aussi