webentwicklung-frage-antwort-db.com.de

Wie kann man verhindern, dass sich der Bildschirm eines Android-Geräts während der Ausführung einer Aktivität ausschaltet?

Ich habe eine Activity, die normalerweise etwas Zeit benötigt, um den Bildschirm ohne Interaktion mit dem Bildschirm zu betrachten.

Das Problem ist, dass der Bildschirm wie bei almos mit jeder anderen App ausgeschaltet wird. Ich möchte verhindern, dass die automatische Deaktivierung für meine Activity wie bei Dolphin HD erfolgt (wenn Sie dies über das Einstellungsmenü konfigurieren). .

Ich möchte, dass der Benutzer den Bildschirm durch Drücken der üblichen Blocktaste ausschaltet, aber die automatische Blockierung des Geräts in meiner Activity - Funktion verhindert.

Wie kann ich das erreichen?

Danke.

27
Alex

Fügen Sie Android:keepScreenOn="true" zu einem Widget in Ihrer Layout-XML-Ressource für diese Aktivität hinzu. Solange dieses Widget auf dem Bildschirm angezeigt wird, wird der Bildschirm nicht automatisch ausgeschaltet.

EDIT:

Ein WakeLock, wie von anderen Antworten vorgeschlagen, wird technisch funktionieren. Aber dann müssen Sie die Taste WakeLock manuell loslassen (wenn Sie das vermasseln, bleibt der Bildschirm lange eingeschaltet). Und da Sie es vermasseln könnten , benötigen Sie die Berechtigung WAKE_LOCK. Die Verwendung von keepScreenOn vermeidet all dies.

79
CommonsWare

Um es im laufenden Betrieb zu ändern:

if (keepScreenOn)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
else
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
29
noelicus

Umgang mit Fragmenten und Bildschirmrotation

Die Android Dokumentation, Halten Sie das Gerät wach umreißt jede Lösung.

Lösung 1 - Flags

Dokumentation - Alternativen zur Verwendung von Wecksperren

Verwenden Sie für Fragmente den programmatischen Ansatz, der weniger batterieintensiv ist.

Aktivieren

activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

Deaktivieren

activity!!.window.clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON)

Für meinen Anwendungsfall habe ich dies in onStop() aufgerufen, sodass der Bildschirm standardmäßig auf die normale Konfiguration zurückgesetzt wird, wenn das Fragment mit dem Medieninhalt beendet wird.

Vermeiden

keepScreenOn=true funktioniert nicht, wenn eine Konfigurationsänderung vorliegt, z. B. eine Bildschirmdrehung für Fragmente.

Hinweis: Android's Halten Sie das Gerät wach Dokumentation sollte entsprechend aktualisiert werden, um diesen Fall zu behandeln.

Lösung 2 - Wake Lock

Dokumentation - CPU eingeschaltet lassen mit Wake Locks

Eine Aktivierungssperre bietet mehr Kontrolle darüber, wie bestimmte Elemente des Geräts aktiviert bleiben. Sie ist jedoch batterieintensiver und muss manuell freigegeben werden, um die Batterie zu schonen, da sie vom System nicht automatisch verarbeitet wird.

0
Adam Hurwitz

Sie möchten WAKE_LOCK zu Ihrem Manifest hinzufügen und es nach Bedarf in Ihrer App festlegen und entfernen Die Google-Dokumente finden Sie hier für PowerManager.WAKE_LOCK

http://developer.Android.com/reference/Android/os/PowerManager.html

0

Möglicherweise möchten Sie die Reaktivierungssperre verwenden, um zu verhindern, dass der Bildschirm deaktiviert wird. Weitere Informationen finden Sie unter http://developer.Android.com/reference/Android/os/PowerManager.WakeLock.html

0
Bhavya

Für "Xamarin Android":

Window.AddFlags(WindowManagerFlags.KeepScreenOn);
0
Matheus Miranda