- Forum-Beiträge: 434
04.11.2014, 17:14:00 via Website
04.11.2014 17:14:00 via Website
Hallo,
ich staue mal wieder darüber wie inkonsistent das Android-System an manchen Stellen doch ist.
Problemstellung:
Ich lasse einen Service laufen, starte von dort eine Activity und möchte, dass diese in den Vordergrund kommt - egal ob das Handy im Lockscreen, oder eine andere Anwendung an zeigt.
Hier der Code, den ich dafür einsetze:
// ist der Bildschirm gesperrt, wecken wir das Gerät auf
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Damit das funktioniert setze ich ein paar WindowFlags. Das funktioniert soweit sehr gut.
Aber sobald ich zum wiederholten Male die Logik ausführe, entsperrt sich der Bildschirm nicht mehr. Wie kann das sein?! Habe auch schon versucht die Flags zurückzusetzen - ohne Erfolg. Eine Methode removeFlags() o.Ä. ist sowieso nicht vorgesehen, deswegen habe ich es mit diesem Code versucht:
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD & ~WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED & ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON & ~WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Wenn mich nicht alles täuscht, sollte man damit doch die gesetzten Flags invertieren, oder habe ich einen "boolschen Denkfehler"?!
Ziel soll wie gesagt sein, dass das Gerät immer aufgeweckt wird, wenn die Activity gestartet wird.
Danke vorab und beste Grüße
Martin
NACHTRAG:
Eine "Auffälligkeit" habe ich noch herausgefunden... Wenn ich die geöffnete Activity mit Drücken des Homebuttons in den Hintergrund bringe und dann das Gerät sperre, wird beim nächsten Entsperren, alles wieder korrekt durchgeführt.
Die Flags in onResume zu setzen hat ebenfalls keinen Erfolg gebracht. Hmm...
Nachtrag 2:
Wenn man vorher einen WakeLock setzt, wird der Bildschirm immer entsperrt, also so wie es sein soll. (ziemlich seltsam - wüsste nicht warum, da ja die Activity bereits im Vordergrund war - nur halt nicht sichtbar - als besagter "Fehler" auftrat)
hier der Code:
// WakeLock um sicher gehen zu können, dass der Bildschrim auch entsperrt wird, wenn
// MainActivity bereits im Vordergrund war.
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
final PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "bbbb");
wakeLock.acquire();
// ist der Bildschirm gesperrt, wecken wir das Gerät auf
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
— geändert am 04.11.2014, 18:03:13
Open Source
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.