Bevor ich diesen Beitrag als "Duplikat" markiere, schreibe ich diesen Beitrag, da kein anderer Beitrag die Lösung des Problems enthält.
Ich versuche, das Gerät auszuschalten und nach einigen Minuten oder einem Sensorwechsel wieder einzuschalten.
Deaktivieren Sie die Anzeigetests
Ich kann den Bildschirm mit folgenden Funktionen ausschalten:
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Ich konnte den Bildschirm mit der Methode wl.release () nicht ausschalten.
Display-Test einschalten
Meine erste Vermutung wie folgt funktioniert nicht. Nichts passiert, Bildschirm bleibt ausgeschaltet.
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);
Ich habe dann auch versucht, Wakelocks zu verwenden, ohne Erfolg.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();
Schließlich habe ich Folgendes versucht, ohne Ergebnis.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Alles in allem wird bei keiner dieser Methoden ein Fehler in der Konsole angezeigt. Mein Testtext "Bildschirm sollte eingeschaltet sein" wird auf dem Bildschirm angezeigt, wenn ich das Gerät mit dem Netzschalter einschalte. Dies zeigt, dass der Code ausgeführt werden sollte. Bitte antworten Sie nur, wenn Sie den Code getestet haben. Es scheint, dass viele der Funktionen wie z. B. params.screenBrightness = -1
nicht so funktionieren, wie sie laut SDK sollten.
Antworten:
Ich gehe davon aus, dass Sie nur möchten, dass dies wirksam wird, während Ihre Anwendung im Vordergrund steht.
Dieser Code:
Schaltet den Bildschirm nicht im herkömmlichen Sinne aus. Dadurch wird der Bildschirm so dunkel wie möglich. In der Standardplattform gibt es eine Grenze, wie dunkel es sein kann; Wenn Ihr Gerät tatsächlich zulässt, dass der Bildschirm vollständig ausgeschaltet wird, ist dies eine Besonderheit der Implementierung dieses Geräts und kein Verhalten, auf das Sie sich geräteübergreifend verlassen können.
Wenn Sie dies in Verbindung mit FLAG_KEEP_SCREEN_ON verwenden, bedeutet dies, dass Sie niemals zulassen, dass der Bildschirm ausgeht (und somit das Gerät in den Energiesparmodus wechselt), selbst wenn Sie mit dem jeweiligen Gerät die Bildschirmhelligkeit auf "Aus" einstellen können. Denken Sie sehr stark daran. Sie verbrauchen viel mehr Strom als wenn der Bildschirm wirklich ausgeschaltet wäre.
Um den Bildschirm wieder auf normale Helligkeit zu bringen, sollten Sie nur den Helligkeitswert einstellen:
Ich kann nicht erklären, warum dies den zuvor eingestellten Wert 0 nicht ersetzen würde. Als Test können Sie versuchen, eine erzwungene volle Helligkeit zu verwenden, um diese spezifische Helligkeit zu erzwingen:
Das funktioniert definitiv. In den Google Books-Apps können Sie beispielsweise die Bildschirmhelligkeit so einstellen, dass sie während der Verwendung eines Buches gedimmt wird, und beim Ausschalten zur normalen Helligkeit zurückkehren.
Um das Debuggen zu erleichtern, können Sie "adb shell dumpsys window" verwenden, um den aktuellen Status Ihres Fensters anzuzeigen. In den Daten für Ihr Fenster werden die aktuellen LayoutParams angezeigt, die dafür festgelegt wurden. Stellen Sie sicher, dass der Wert, von dem Sie denken, dass er tatsächlich vorhanden ist.
Auch hier ist FLAG_KEEP_SCREEN_ON ein separates Konzept. es und die Helligkeit haben keinen direkten Einfluss aufeinander. (Und es gibt keinen Grund, das Flag beim Rückgängigmachen der Helligkeit erneut zu setzen, wenn Sie es bereits gesetzt haben, als Sie die Helligkeit auf 0 gesetzt haben. Das Flag bleibt gesetzt, bis Sie es ändern.)
quelle
Ich hatte diese Methode geschrieben, um den Bildschirm nach der Bildschirmsperre einzuschalten. Es funktioniert perfekt für mich. Versuch es-
Und rufen Sie diese Methode von auf
onResume()
.quelle
Ich würde dieses vorschlagen:
Das Flag ACQUIRE_CAUSES_WAKEUP wird folgendermaßen erklärt:
Stellen Sie außerdem sicher, dass Sie über die folgende Berechtigung in der Datei AndroidManifewst.xml verfügen:
quelle
Hallo, ich hoffe das wird helfen:
quelle
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
die den Bildschirm nur ausschaltet, wenn sich der Näherungssensor im Zustand "Nah" befindet.PROXIMITY_SCREEN_OFF_WAKE_LOCK
Wartesperre loslasse, wird der Bildschirm wieder eingeschaltet. Wie verhindere ich das?// Benutzermanifestdatei
quelle
Sind Sie sicher, dass Sie die richtige Berechtigung in Ihrer Manifest-Datei angefordert haben?
Mit der AlarmManager 1- Klasse können Sie eine Absicht auslösen , die Ihre Aktivität startet und die Wecksperre erwirbt. Dadurch wird der Bildschirm eingeschaltet und eingeschaltet. Durch Loslassen des Wakelocks kann das Gerät selbstständig einschlafen.
Sie können auch einen Blick auf die Verwendung des PowerManager werfen, um das Gerät in den Energiesparmodus zu versetzen: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(long)
quelle
Der beste Weg, dies zu tun (mit gerooteten Geräten):
Jetzt haben wir diese zwei Funktionen:
Und das:
Entschuldigung für mein schlechtes Englisch.
quelle
Hier ist ein erfolgreiches Beispiel für eine Implementierung derselben Funktion auf einem Gerät, das niedrigere Bildschirmhelligkeitswerte unterstützt (ich habe sie auf einem Allwinner Chinese 7 "-Tablet mit API15 getestet).
Wenn jemand anderes dies ausprobiert, kommentieren Sie bitte unten, ob es funktioniert hat / nicht funktioniert hat und das Gerät, die Android-API.
quelle
So behalten Sie den Bildschirm bei:
Zurück zum Standardmodus des Bildschirms: Deaktivieren Sie einfach das Flag FLAG_KEEP_SCREEN_ON
quelle
Dies wird auf Marshmallow gearbeitet
quelle
In Bezug auf die Android-Dokumentation kann dies mithilfe der folgenden Codezeile erreicht werden:
Ich habe dies in meiner
onCreate
Methode hinzugefügt und es funktioniert gut.Unter dem Link finden Sie verschiedene Möglichkeiten, dies zu erreichen, sowie allgemeine Erklärungen.
Link zur Dokumentation: https://developer.android.com/training/scheduling/wakelock.html
quelle
Wenn Ihre App eine System-App ist, können Sie mit PowerManager.goToSleep () den Bildschirm ausschalten. Sie benötigen eine spezielle Berechtigung
Bevor Sie goToSleep () verwenden, müssen Sie Reflection wie folgt verwenden:
Jetzt können Sie mit goToSleep () den Bildschirm ausschalten.
quelle
Einfach hinzufügen
oder anrufen
in der übergeordneten Ansicht.
quelle
Ich hätte keine Hoffnung, den Bildschirm in der Aktivität zu "wecken". Wenn der Bildschirm ausgeschaltet ist, befindet sich die Aktivität wahrscheinlich in einem angehaltenen Zustand und sollte keinen Code ausführen.
Beim Aufwachen tritt das Problem mit dem Sperrbildschirm auf. Ich weiß nicht, wie eine App den Sperrbildschirm automatisch umgehen kann.
Sie sollten in Betracht ziehen, Ihre Hintergrundaufgaben in einem Dienst auszuführen und dann mithilfe des Benachrichtigungsmanagers eine Benachrichtigung zu senden, wenn etwas erkannt wird. Die Benachrichtigung sollte eine Art Gerätealarm enthalten (Bildschirmweck, Benachrichtigungssymbol, Benachrichtigungs-LED usw.). Wenn Sie auf die Benachrichtigung klicken, kann die Absicht gestartet werden, Ihre Aktivität zu starten.
Sie könnten auch versuchen, die Aktivität direkt vom Dienst aus zu starten, aber ich weiß wirklich nicht, ob dadurch der Bildschirm eingeschaltet oder der Sperrbildschirm umgangen wird.
quelle
Gemäß Android API 28 und höher müssen Sie die folgenden Schritte ausführen, um den Bildschirm einzuschalten
quelle
Ich habe alle oben genannten Lösungen ausprobiert, aber keine hat für mich funktioniert. Also habe ich gegoogelt und unten Lösungen gefunden. Ich habe es versucht und es hat funktioniert.
https://www.tutorialspoint.com/how-to-turn-android-device-screen-on-and-off-programmatisch
Wenn es einen Vorschlag gibt, geben Sie bitte
quelle