Antworten:
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 einfach setKeepScreenOn(true)auf Viewoder setzen Sie die keepScreenOnEigenschaft auf true. Dadurch wird verhindert, dass der Bildschirm ausgeht, während Viewder Bildschirm angezeigt wird. Hierfür ist keine besondere Erlaubnis erforderlich.
setKeepScreenOn(true)nur wirksam wird, wenn Viewes sichtbar ist.
Ich habe eine andere funktionierende Lösung gefunden: Fügen Sie Ihrer App unter dem Ereignis onCreate die folgende Zeile hinzu.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Mein Beispiel für ein Cordova-Projekt sieht folgendermaßen aus:
package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;
public class ScanManActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
super.loadUrl("http://stackoverflow.com");
}
}
Danach ging meine App nicht mehr in den Ruhezustand, solange sie geöffnet war. Danke für die Antwort geht an xSus.
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
Setzen Sie die Flags im Fenster der Aktivität wie folgt
@Override public void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override public void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Über die Root-Shell (z. B. ADB-Shell) können Sie sperren mit:
echo mylockname >/sys/power/wake_lock
Danach bleibt das Gerät wach, bis Sie Folgendes tun:
echo mylockname >/sys/power/wake_unlock
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/
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 , AlarmManagerum 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)