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.

serrer
la source
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);
Ian G. Clifton
la source
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.

capellone78
la source
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"

Neteinstein
la source
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);
Exception de pointeur nul
la source
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);
}
Orkoden
la source
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

Gonkas
la source
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);
MBMJ
la source
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;
Artur Majtczak
la source
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);
                }
            });
        }

    }
Manisha
la source
-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.

wonne
la source
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