2010-11-20 6 views
8

Wie kann ich die Tastensperre deaktivieren, wenn ein Broadcast-Empfänger von screen_on aktiviert wird, so dass der Benutzer eine Aktivität sieht, die ich gestartet habe? (Die Aktivität läuft bereits ...)Wie Keyguard zu deaktivieren und eine Aktivität für den Benutzer anzuzeigen, wenn der Empfänger von SCREEN_ON ausgelöst wird?

Ich habe von Bildschirm aus dem folgenden Code aus einem Rundfunkempfänger ausgelöst versuchen ...

KeyguardManager myKeyGuard = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 
myLock = myKeyGuard.newKeyguardLock(); 
myLock.disableKeyguard(); 

Es scheint nicht, obwohl, wie es zu arbeiten, ist. Wenn ich den Bildschirm einschalte, muss ich die Tastensperre auf dem Telefon manuell entsperren, um die Aktivität dahinter anzuzeigen.

+0

Ich bin auf einen Code gestoßen, der exitKeyguardSecurely() zusätzlich verwendet hat. Ich konnte es noch nicht zur Arbeit bringen, deshalb setze ich jetzt die Flagge FLAG_DISMISS_KEYGUARD für meine Aktivität. – Ryan

+0

Ryan, kannst du bitte deinen Code teilen. Ich arbeite auch am selben. – Manikandan

Antwort

1

Ich denke, ich habe herausgefunden, was ich falsch gemacht habe. Es scheint, als wäre es nur ein Tag-Fehler in meinem Manifest, wenn ich die disable_keyguard-Berechtigung verwende. Es funktioniert jetzt korrekt, nachdem ich das Manifest korrigiert habe.

+0

das Hinzufügen dieser Erlaubnis funktioniert nicht für mich. Ich muss meine Aktivität ausführen, wenn der Benutzer die Entsperrtaste drückt. Die Aktivität sollte vor dem Entsperrungsbildschirm ausgelöst werden. – Manikandan

5

Ich würde empfehlen, die Fensterflags disfid_keyguard oder show_when_locked zu verwenden, wenn Sie ein Fenster haben, das beim Aufwachen über die Oberseite des Lockscreen kommen muss.

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED

wie nutzen Sie diese wie folgt (in onCreate genannt, bevor Sie das Layout)

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
+6

Ich weiß, das ist ein alter Post, aber die Flaggen funktionierten nicht für mich, egal wo ich sie hinlegte, der Keyguard-Manager scheint dagegen immer zu funktionieren. Nur ein Hinweis für andere Leser – Idistic

+0

Es ist wahr, dass die Verwendung der Flags die "empfohlene" Lösung ist, aber Sie werden feststellen, dass sie in der Praxis nicht perfekt sind. Zum Beispiel, mit Flags "blinkt" die Tastatur kurz, wenn die Aktivität außerhalb des Fokus verschoben wird. Es ist klein, aber zermürbend. Wenn Sie die Tastensperre vollständig deaktivieren, tritt dieses Problem nicht auf. –

+0

Beachten Sie, dass die Aktivität überhaupt nicht transparent sein kann. Sie können die dialog.getWindow() auch nicht verwenden, um die Flags festzulegen. Dies ist wahrscheinlich, um es einer Anwendung nicht zu erlauben, Aktivitäten von anderen Anwendungen zu "zeigen". Sehen Sie sich dieses Problem https://code.google.com/p/android/issues/detail?id=8778 an – aaronvargas

1

Ich sehe nicht die Keyguard Lösung Arbeit (und es ist veraltet). Was für mich funktioniert, ist ein Dauerankündiger PARTIAL_WAKE_LOCK, die ich nie freigeben. Dies verhindert, dass das Gerät wirklich einschläft und vermeidet so, dass der Sperrbildschirm aktiviert wird.

Dann jedes Mal, wenn der Bildschirm ausgeschaltet wird, höre ich für diese Benachrichtigung und wecken das Gerät wieder auf. Es funktioniert auf allen Geräten, auf denen ich getestet habe.

Ich erkenne, dass dies die Batterie des Geräts ziemlich schnell töten wird, also müssen Sie dies sehr sparsam und achtsam verwenden.