78 votes

Désactiver le maintien de l'écran allumé

J'ai utilisé :

getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Comment puis-je revenir à l'état par défaut (sans maintien) ?

0 votes

Je sais que la réponse est acceptée mais je me demande quel serait votre cas d'utilisation pour cela ? Voulez-vous que l'écran reste allumé pendant que l'activité est à l'écran, après ou quoi ? Quand voulez-vous le remettre dans l'état par défaut (sans maintien de l'écran) ? Merci pour les éclaircissements

4 votes

@Ewoks - Un cas d'utilisation est lorsque vous fournissez une préférence utilisateur pour garder l'écran allumé pendant une activité particulière (par exemple, la lecture de texte) et que l'utilisateur le désactive pendant que l'activité est active (ou sur la pile arrière). Vous voudriez alors désactiver l'indicateur sans relancer l'activité elle-même. (L'alternative serait que le changement de préférence ne prenne pas effet jusqu'à ce que l'activité soit terminée et redémarrée).

159voto

Noel Points 2852

Je pense que ça devrait le faire :

getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Véase API pour les détails.

7 votes

Juste une note pour ceux qui ne sont pas au courant. L'ajout et l'effacement de ces drapeaux doit être fait sur le thread de l'interface utilisateur. Cela m'a surpris d'une manière étrange. Plutôt que de ne pas fonctionner, j'ai constaté un fonctionnement intermittent et même inversé des drapeaux KEEP_SCREEN_ON.

0 votes

Je me demandais pourquoi la réponse recevait un taux aussi élevé mais ne fonctionnait pas pour moi. Après plusieurs heures, je me suis rendu compte qu'il y a une autre activité dans mon application qui maintient l'écran allumé. Donc, vérifiez les autres activités si le code ci-dessus ne fonctionne pas pour vous. :D

0 votes

Je n'ai eu aucun problème à faire cela dans onCreate(). Cela n'a probablement pas d'importance, mais je place toujours mes drapeaux avant setContentView(). Il y a peut-être une raison, mais j'utilise la même configuration depuis si longtemps que je ne m'en souviens plus. De plus, certains de ces drapeaux peuvent cesser de fonctionner si votre minSdkVersion est fixée à une valeur plus élevée. Si quelque chose ne fonctionne pas, cela peut être la raison.

20voto

Alexander Abramov Points 603

Si vous définissez plutôt un drapeau Android:keepScreenOn="true" ( documentation ) uniquement sur les vues qui doivent garder l'écran allumé, vous n'auriez pas besoin de réinitialiser le drapeau manuellement.

4voto

Nepster Points 893

Une autre approche

getWindow().setFlags(this.getWindow().getFlags() & ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Lisez aussi ceci

et vous pouvez également définir android:keepScreenOn="true" dans la vue racine en xml.

0voto

NazarYavornytskyy Points 189

Directement à partir de la documentation :

Remarque : il n'est pas nécessaire d'effacer l'indicateur FLAG_KEEP_SCREEN_ON, sauf si vous ne voulez plus que l'écran reste allumé dans votre application en cours d'exécution (par exemple, si vous voulez que l'écran s'éteigne après une certaine période d'inactivité). Le gestionnaire de fenêtres s'assure que les bonnes choses se produisent lorsque l'application passe en arrière-plan ou revient au premier plan. Mais si vous voulez explicitement effacer le drapeau et ainsi permettre à l'écran de s'éteindre à nouveau, utilisez clearFlags() : getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X