Wie verhindere ich, dass ein Android-Gerät programmgesteuert in den Ruhezustand wechselt?
Eine Möglichkeit ist die Verwendung einer Wecksperre . Beispiel aus den Dokumenten:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
Auf dieser Seite gibt es auch eine Tabelle , in der die verschiedenen Arten von Wakelocks beschrieben werden.
Beachten Sie, dass bei der Verwendung von Weckschlössern Vorsicht geboten ist. Stellen Sie sicher, dass Sie immer release()
die Sperre haben, wenn Sie damit fertig sind (oder nicht im Vordergrund). Andernfalls kann Ihre App möglicherweise zu einer ernsthaften Batterieentladung und CPU-Auslastung führen.
Die Dokumentation enthält auch eine nützliche Seite , auf der verschiedene Ansätze beschrieben werden, um ein Gerät wach zu halten und wann Sie eines verwenden möchten. Wenn sich "Verhindern, dass das Gerät in den Ruhezustand wechselt" nur auf den Bildschirm bezieht (und die CPU nicht aktiv hält), ist eine Wecksperre wahrscheinlich mehr als Sie benötigen.
Sie müssen auch sicherstellen, dass in Ihrem Manifest die Berechtigung WAKE_LOCK festgelegt ist, um diese Methode verwenden zu können.
Wenn Sie nur den Ruhemodus für einen bestimmten Modus verhindern möchten
View
, rufen Sie diesen einfachsetKeepScreenOn(true)
aufView
oder setzen Sie diekeepScreenOn
Eigenschaft auftrue
. Dadurch wird verhindert, dass der Bildschirm ausgeht, währendView
der Bildschirm angezeigt wird. Hierfür ist keine besondere Erlaubnis erforderlich.quelle
setKeepScreenOn(true)
nur wirksam wird, wennView
es sichtbar ist.Ich habe eine andere funktionierende Lösung gefunden: Fügen Sie Ihrer App unter dem Ereignis onCreate die folgende Zeile hinzu.
Mein Beispiel für ein Cordova-Projekt sieht folgendermaßen aus:
Danach ging meine App nicht mehr in den Ruhezustand, solange sie geöffnet war. Danke für die Antwort geht an xSus.
quelle
android:keepScreenOn="true"
könnte eine bessere Option sein, um aus Layout-XML zu haben.Weitere Informationen: https://developer.android.com/training/scheduling/wakelock.html
quelle
Setzen Sie die Flags im Fenster der Aktivität wie folgt
quelle
Über die Root-Shell (z. B. ADB-Shell) können Sie sperren mit:
Danach bleibt das Gerät wach, bis Sie Folgendes tun:
Mit der gleichen Zeichenfolge für 'mylockname'.
Beachten Sie, dass dies nicht verhindert, dass der Bildschirm schwarz wird, sondern dass die CPU nicht in den Ruhezustand wechselt.
Beachten Sie, dass / sys / power / wake_lock Lese- / Schreibzugriff für Benutzerradio (1001) und Gruppensystem (1000) und natürlich root ist.
Eine Referenz finden Sie hier: http://lwn.net/Articles/479841/
quelle
Was @eldarerathis gesagt hat, ist in jeder Hinsicht richtig. Die Wake-Sperre ist der richtige Weg, um das Gerät vom Einschlafen abzuhalten.
Ich weiß nicht, was Ihre App tun muss, aber es ist wirklich wichtig, dass Sie darüber nachdenken, wie Ihre App aufgebaut ist, damit Sie das Telefon nicht zwingen, für mehr, das Sie benötigen, wach zu bleiben, da sonst die Akkulaufzeit enorm leidet.
Ich möchte Sie zu diesem wirklich zeigen gutes Beispiel , wie man verwenden ,
AlarmManager
um Feuer Ereignisse und das Telefon und (App) aufwachen, um auszuführen , was Sie tun müssen , und dann schlafen gehen wieder: Alarm Manager (Quelle: commonsware.com)quelle
Wenn Sie ein Xamarin-Benutzer sind, ist dies die Lösung:
quelle