web-dev-qa-db-fra.com

Gardez l'écran éveillé tout au long de mon activité

J'ai trois activités dans mon application. Je veux garder l'écran éveillé lors de la deuxième activité. L'écran ne devrait pas s'éteindre dans ma deuxième activité à moins que la touche "verrouillage" soit pressée manuellement. J'ai parcouru de nombreux liens mais ils me semblent peu clairs.

54
user838522

Comme indiqué dans le didacticiel Android Gardez l'écran allumé , vous pouvez le faire de plusieurs manières. Vous pouvez définir le FLAG_KEEP_SCREEN_ON dans la fenêtre de l'activité:

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

Un équivalent XML pour cela consiste à ajouter l'attribut Android:keepScreenOn="true" à la vue racine de la présentation de votre activité. L'avantage de définir l'indicateur par programme est que vous pouvez utiliser

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

lorsque vous n'avez plus besoin de forcer l'écran à rester allumé pendant que votre activité est en cours.

Une autre façon de contrôler l'écran (et certaines autres ressources) consiste à utiliser un verrouillage de réveil:

mWakeLock = ((PowerManager) getContext().getSystemService(Context.POWER_SERVICE))
    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
mWakeLock.acquire();
// screen stays on in this section
mWakeLock.release();

Le manifeste devra inclure cette autorisation:

<uses-permission Android:name="Android.permission.WAKE_LOCK"/>

Cependant, comme indiqué dans le didacticiel, un verrouillage de réveil est plus approprié pour d'autres cas d'utilisation (comme une tâche de service ou d'arrière-plan nécessitant que le processeur continue de fonctionner alors que l'écran est éteint).

148
Ted Hopp

Je trouve cette solution beaucoup plus simple:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" // Whatever your layout is
    ...
    Android:keepScreenOn="true"> // Add this line

Ajoutez-le simplement à la présentation XML de votre activité.

48

Comme je comprends votre question, je pense que vous devez utiliser WAKE_LOCK pour cela dans votre application.

Quelque chose comme,

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");    
mWakeLock.acquire();

Et dans le fichier manifest.xml de votre application, ajoutez ceci,

<uses-permission Android:name="Android.permission.WAKE_LOCK" />
7
user370305

essayez d'utiliser ceci

getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN
                                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
1
bindal

Ce code est obsolète, utilisez-le à la place:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

Après avoir terminé l'utilisation, appelez (la meilleure solution consiste à appeler cette méthode dans la méthode onDestroy d'une activité):

wl.release();

En savoir plus à ce sujet lien

1
PetarT