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.