Hallo Leute,
ich habe die Anforderung bekommen, dass meine App während bestimmte Funktionen laufen (z. B. der Benutzer drückt auf einen Button und es werden Daten vom Server abgerufen) der Screen immer an bleiben soll (setKeepScreenOn(true)). Nachdem die jew. Funktion durchgelaufen ist, soll der Dauer-Screen-On-Modus wieder deaktiviert werden (setKeepScreenOn(false)), so dass der Bildschirm entsprechend der im System eingestellten Zeit irgendwann wieder ausgeht.
Meine Anwendung (läuft auf 2.3-Geräten) besteht aus einer einzigen Activity die ein FrameLayout enthält in das die Fragmente immer eingesetzt werden.
Ich habe verschiedene Ansätze versucht die leider alle nicht funktionierten, weshalb ich mich jetzt an Euch wende:
Im Manifest ist folgendes gesetzt:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Versuch 1:
public void setKeepScreenOn(boolean pOn){
View view = getLayoutInflater().inflate(R.layout.activity_main, null);
view.setKeepScreenOn(pOn);
}
-> Der Aufruf der Funktion setKeepScreenOn hat überhaupt keine Auswirkung
Versuch 2:
private PowerManager mPowerManager;
private PowerManager.WakeLock mWakeLock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP, "no sleep");
.......................}
public void setKeepScreenOn(boolean pOn){
try {
if (pOn){
mWakeLock.acquire();
}
else{
if (mWakeLock.isHeld()){
mWakeLock.release();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Alles anzeigen
-> Der Aufruf der Funktion setKeepScreenOn hat überhaupt keine Auswirkung. mWakeLock.isHeld() ist false, obwohl das WakeLock zwischendurch nicht released wird.
Versuch 3:
public void setKeepScreenOn(boolean pOn){
if (pOn){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
else{
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
-> Der Aufruf der Funktion setKeepScreenOn hat überhaupt keine Auswirkung. Wenn ich die Funktion setKeepScreenOn(true) testweise im onCreate aufrufe bleibt der Bildschirm immer an, auch wenn später wieder setKeepScreenOn(false) aufgerufen wird.
Habt Ihr eine Idee wie ich die Problematik lösen kann?
Gruß hs1