Android deaktiviert das Bildschirm-Timeout, während die App ausgeführt wird


Antworten:


172

Sie möchten so etwas verwenden:

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

4
das macht es für die laufende Aktivität oder die ganze App?
— Muhammed Refaat

@ MayurR.Amipara Ja, ich denke, das ist hier der Fall
— Muhammed Refaat

1
Wenn ich diesen Code in die Methode onCreate () der Anwendungsklasse schreibe, funktioniert er dann für die gesamte App?
— Jayesh

Wenn nein, wie kann ich den gesamten App-Bildschirm eingeschaltet lassen, indem ich weniger Code einfüge, anstatt diese Zeile zu jeder Aktivität hinzuzufügen?
— Jayesh

1
@ Jayesh: Sie können eine baseActivity erstellen und diesen Code in die onCreate-Methode schreiben und alle Aktivitäten von baseActivity aus erweitern.
— Maryam

102

Ich benutzte:

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

um das Bildschirm-Timeout zu deaktivieren und

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

um es wieder zu aktivieren.


83

Es gibt auch eine XML-Methode, die Google empfiehlt:

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

Überprüfen Sie Google Slides - Folie 16.

"Wakelocks sind teuer, wenn sie vergessen werden (...) Erwägen Sie die Verwendung von Android: keepScreenOn, um die Richtigkeit sicherzustellen."


2
Für diejenigen, die keine Zeit haben, das verknüpfte PDF zu lesen: "Wakelocks sind teuer, wenn sie vergessen werden", "Erwägen Sie die Verwendung von android: keepScreenOn, um die Richtigkeit sicherzustellen".
— Lenrok258

2
@ lenrok258 Zur Antwort
— hinzugefügt ;-)

Während der Verwendung PowerManager.newWakeLockund getWindow().addFlagsaus irgendeinem Grund nicht funktioniert, tat dies.
— Benjamin Basmaci


3

Fügen Sie einfach die folgende Zeile in Ihre hinzu MainActivityund Ihre App schaltet niemals das Licht aus.

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

2

In einer Ansicht, in meinem Fall einer SurfaceView-Unterklasse, können Sie den Bildschirm immer einschalten. Ich wollte, dass der Bildschirm eingeschaltet bleibt, während diese Ansicht noch Material zeichnet.

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

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

1
Das ist eigentlich komplizierter als nötig. Rufen Sie einfach irgendwo setKeepsScreenOn (true) auf, und das Framework sorgt automatisch dafür, dass der Bildschirm eingeschaltet bleibt, wenn Ihr Fenster angezeigt wird.
— Hackbod

1

Setzen Sie dies auf onStart

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

Und das manifestiert sich bei dir

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

Vergiss es nicht

wakeLock.release();

bei onStop


1
PARTIAL_WAKE_LOCKErmöglicht das Ausschalten des Bildschirms.
— Michael

1

Dies ist der beste Weg, um dies zu lösen

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

Warum muss FLAG_FULLSCREEN diese Frage beantworten?
— 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) ist die beste Lösung für natives Android.
2. Wenn Sie mit der React Android-Anwendung arbeiten möchten, verwenden Sie bitte den folgenden Code.

@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

Dies kann durch den Erwerb eines Wake Lock erfolgen.

Ich habe es nicht selbst getestet, aber hier ist ein kleines Tutorial dazu.


10
Nein nein Nein. Wake-Locks können leicht missbraucht werden und können den Akku des Benutzers entladen, wenn sie nicht sehr vorsichtig verwendet werden. Verwenden Sie View#setKeepScreenOnoder sein XML-Layout-Attribut äquivalent,android:keepScreenOn="true"
— adamp

5
@adamp: Das OP hat nicht angegeben, ob es sich bei seiner App um eine Aktivität oder einen Dienst handelt. Eine Aktivität sollte den von Ihnen genannten Mechanismus verwenden. Ein Dienst sollte a verwenden WakeLock.
— CommonsWare

Danke, es ist kein Service. Es ähnelt einem Bildbetrachter und ich möchte nicht, dass der Bildschirm abgeblendet wird.
— Klemme

@adamp: Ihre Erwähnung android:keepScreenOn="true"ist meiner Meinung nach die einzig gültige Antwort für Aktivitäten. Halten Sie sich von Wakelocks fern, es sei denn, dies ist unbedingt erforderlich.
— Pauluss86

Nicht nur Aktivitäten, sondern jede Art von Benutzeroberfläche, die ein Fenster anzeigt. Die akzeptierte Antwort auf die Verwendung des entsprechenden Fensterflags ist gleichermaßen gültig.
— Adamp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.