Android désactive le délai d'expiration de l'écran pendant l'exécution de l'application


117

Existe-t-il un moyen de désactiver l'économiseur d'écran pendant que mon application est en cours d'exécution?

La gradation de l'écran est ce que je veux dire.


3
Qu'en est-il de l'utilisation de View.setKeepScreenOn()[link] [1] ?. Je ne l'ai jamais utilisé moi-même. [1]: developer.android.com/reference/android/view/…
dorzey

3
duplicata possible de Force Screen On
Richard Ev

Réponses:


173

Vous souhaitez utiliser quelque chose comme ceci:

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

4
cela en fait-il pour l'activité en cours d'exécution ou l'application entière?
Muhammed Refaat

@ MayurR.Amipara ouais je pense que c'est le cas ici
Muhammed Refaat

1
Si j'écris ce code dans la méthode onCreate () de la classe Application, cela fonctionnera-t-il pour toute l'application?
Jayesh

Si non, comment puis-je garder tout l'écran de l'application allumé en insérant moins de code au lieu d'ajouter cette ligne à chacune des activités.
Jayesh

1
@Jayesh: Vous pouvez créer une baseActivity et écrire ce code dans la méthode onCreate et étendre toutes les activités de baseActivity.
maryam

102

J'ai utilisé:

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

pour désactiver le délai d'expiration de l'écran et

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

pour le réactiver.


84

Il existe également une méthode XML recommandée par Google:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true">

Vérifiez Google Slides - Diapositive 16.

"Wakelocks est coûteux en cas d'oubli (...) Pensez à utiliser android: keepScreenOn pour vous assurer de l'exactitude"


2
Pour ceux qui n'ont pas le temps de lire le pdf lié: "Wakelocks est coûteux si oublié", "Pensez à utiliser android: keepScreenOn pour vous assurer de l'exactitude".
lenrok258

2
@ lenrok258 Ajouté à la réponse ;-)
neteinstein

Lors de l'utilisation PowerManager.newWakeLocket getWindow().addFlagsn'a pas fonctionné pour une raison quelconque, cela a fonctionné.
Benjamin Basmaci


3

Ajoutez simplement la ligne ci-dessous dans votre MainActivityet votre application n'éteignez jamais les lumières.

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

2

Dans une vue, dans mon cas une sous-classe SurfaceView, vous pouvez activer l'écran toujours activé. Je voulais que l'écran reste allumé pendant que cette vue dessinait encore des trucs.

public class MyCoolSurfaceView extends SurfaceView { 
@Override
protected void onAttachedToWindow (){
    super.onAttachedToWindow();
    this.setKeepScreenOn(true);
}

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}

1
C'est en fait plus compliqué que nécessaire. Appelez simplement setKeepsScreenOn (true) n'importe où, et le framework s'occupera automatiquement de garder l'écran allumé lorsque votre fenêtre est affichée.
hackbod

1

Mettez ceci à onStart

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep");
    wakeLock.acquire();

Et cela chez vous manifeste

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

N'oubliez pas de

wakeLock.release();

chez onStop


1
PARTIAL_WAKE_LOCKpermet à l'écran de s'éteindre.
Michael

1

c'est la meilleure façon de résoudre ce problème

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

pourquoi le besoin de FLAG_FULLSCREEN pour répondre à cette question?
Abdul Wasae


0
procedure SetSleep(aEnable:Boolean);
var
    vFlags: integer;
begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
end;

0

1.getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); est la meilleure solution pour Android natif.
2. si vous voulez faire avec l'application Android React, veuillez utiliser le code ci-dessous.

@ReactMethod
    public void activate() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                }
            });
        }

    }

-1

Cela peut être fait en acquérant un Wake Lock.

Je ne l'ai pas testé moi-même, mais voici un petit tutoriel à ce sujet.


10
Non non Non. Les verrous de réveil sont facilement mal utilisés et peuvent vider la batterie de l'utilisateur s'ils ne sont pas utilisés avec beaucoup de précaution. Utilisez View#setKeepScreenOnou son équivalent d'attribut de mise en page xml,android:keepScreenOn="true"
adamp

5
@adamp: l'OP n'a pas indiqué si son application est une activité ou un service. Une activité doit utiliser le mécanisme que vous citez. Un service doit utiliser un WakeLock.
CommonsWare

merci ce n'est pas un service. c'est similaire à une visionneuse d'images et je ne veux tout simplement pas que l'écran soit atténué.
pince

@adamp: votre mention de android:keepScreenOn="true"est la seule réponse valable pour les activités à mon avis. Éloignez-vous des réveils sauf si c'est absolument nécessaire.
pauluss86

Pas seulement des activités, mais toute sorte d'interface utilisateur qui affiche une fenêtre. La réponse acceptée d'utiliser l'indicateur de fenêtre correspondant est également valable.
adamp le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.