Bildschirm erzwingen

115

Wie erzwinge ich, dass der Bildschirm aktiv bleibt und nicht ausgeschaltet wird, während meine App ausgeführt wird?

fehlerhaft
quelle
Siehe Detailantwort hier .. stackoverflow.com/questions/5712849/…
Zar E Ahmer

Antworten:

339

BITTE VERWENDEN SIE KEIN WAKE LOCK

Dies erfordert, dass Sie Ihrer App eine zusätzliche Berechtigung erteilen. Es ist sehr einfach, Fehler einzuführen, bei denen Sie versehentlich die Wecksperre gedrückt halten und den Bildschirm eingeschaltet lassen.

Es ist weitaus besser, die Fensterflagge zu verwenden FLAG_KEEP_SCREEN_ON, die Sie im Fenster Ihrer Aktivität onCreate()wie folgt aktivieren können :

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

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

Dadurch wird sichergestellt, dass der Bildschirm eingeschaltet bleibt, während sich Ihr Fenster im Vordergrund befindet, und nur, wenn es sich im Vordergrund befindet. Dies vereinfacht diesen allgemeinen Anwendungsfall erheblich und eliminiert jegliches Jonglieren, das Sie beim Übergang Ihrer App zwischen Status ausführen müssen.

Hackbod
quelle
5
Verhindert das, dass das Gerät schläft? Wenn ja, erscheint mir die Gemeinsamkeit von WAKE_LOCK als schockierender Fehler!
Michael Cramer
32
Ja, der Bildschirm bleibt eingeschaltet und das Gerät kann nicht in den Ruhezustand versetzt werden.
Hackbod
1
Ja, Sie können das Flag mit der entsprechenden Fenster-API entfernen. Sie müssen sich keine Sorgen machen, dass etwas gezeichnet wird. Das Framework erledigt dies bei Bedarf.
Hackbod
1
@hakbod: Dies würde funktionieren, um den Bildschirm am Leben zu erhalten, aber was ist mit dem Bildschirm, der schläft, würde er ihn aufwecken und am Leben erhalten ????
Kavitha
5
@ KC202 Sie können WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON verwenden, um den Bildschirm einzuschalten, wenn Ihr Fenster angezeigt wird. Wird auch häufig mit FLAG_DISMISS_KEYGUARD und / oder FLAG_SHOW_WHEN_LOCKED verwendet.
Hackbod
34

Diese Frage hat bereits eine großartige Antwort von @hackbod!

Ich beantworte diese Frage mit zwei zusätzlichen Lösungen!

Bestehende Lösung:

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

Zusätzliche Lösungen:

wir können benutzen keepScreenOn

1. implementation mitsetKeepScreenOn() in java code

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // or any View (in case generated programmatically ) 
        View v = getLayoutInflater().inflate(R.layout.driver_home, null);

        v.setKeepScreenOn(true);
        setContentView(v);
       }

Dokumente http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

2. Hinzufügen keepScreenOnzuxml layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true" >

Dokumente http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

Hinweis (einige nützliche Punkte):

1. Es spielt keine Rolle, dass keepScreenOnes verwendet werden soll. Main/Root/Parent View Es kann mit jedem child viewWillen verwendet werden, der genauso funktioniert wie inParent view

2. Die einzige Sache ist, dass es View's Visibility must be visiblesonst nicht funktioniert!

Tarsem Singh
quelle
note v.setKeepScreenOn(true);scheint der einzige Weg zu sein, dies für ein Vollbild-Dialogfragment zu tun
Tim
16

Eine andere Lösung ist das Hinzufügen android:keepScreenOn="true"( Dokumentation) ) , um die Ansichten, die den Bildschirm auf halten müssen.

Ermöglicht eine etwas genauere Steuerung, welche Ansichten aktiviert bleiben und welche nicht. Auf diese Weise können Sie sogar auf eine Einstellung aus einer Ressourcendatei verweisen.

Alexander Abramov
quelle