So habe ich ACTION_USER_PRESENT
, ACTION_SCREEN_ON
und ACTION_SCREEN_OFF
in einem Dienst registriert.ACTION_USER_PRESENT wird nicht empfangen, wenn "Automatisch nach n Sekunden sperren"
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_USER_PRESENT);
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, screenStateFilter);
Hier sind einige Situationen:
[Korrektur]Benutzerhandbuch "Bildschirmsperre" = Keine: Wenn ich Power-Taste drücken, wird sowohl
ACTION_SCREEN_ON
undACTION_SCREEN_OFF
empfangen .[Korrektur]Benutzerhandbuch "Bildschirmsperre" = Swipe: Wenn ich Power-Taste drücken, wird der Sperrbildschirm angezeigt und
ACTION_SCREEN_ON
empfangen wird. Nach dem Entsperren wirdACTION_USER_PRESENT
empfangen.[Korrektur]Benutzerhandbuch "Bildschirmsperre" = Muster/PIN/Passwort & automatisch = sofort sperren: Wenn ich Power-Taste drücken, wird der Sperrbildschirm angezeigt und
ACTION_SCREEN_ON
Ist angekommen. Nach dem Entsperren wirdACTION_USER_PRESENT
empfangen.[Falsche]Benutzerhandbuch "Bildschirmsperre" = Muster/PIN/Passwort & automatisch sperren = 15 Sekunden: Wenn ich den Bildschirm sperren und entsperren nach 15 sec, die Sperrbildschirm wird angezeigt und
ACTION_SCREEN_ON
wird empfangen. Nach dem Entsperren wirdACTION_USER_PRESENT
empfangen. Aber wenn ich den Bildschirm sperren und vor 15 Sekunden entsperren, wird (wie erwartet) kein Sperrbildschirm angezeigt, sondern nurACTION_SCREEN_ON
empfangen. Kein ACTION_USER_PRESENT wird empfangen.
So wie kann ich eine Methode aufgerufen wird gewährleisten, wenn (Benutzer entsperrt Bildschirm)/(ACTION_SCREEN_ON
, wenn der Bildschirm immer noch nicht gesperrt ist).
Ich habe
versuchtKeyguardManager mKeyguard = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if (!mKeyguard.inKeyguardRestrictedInputMode()) {
if (action.equals(Intent.ACTION_SCREEN_ON)) {
// Call method
}
}
if (action.equals(Intent.ACTION_USER_PRESENT)) {
// Call method
}
Aber das Verfahren wird zweimal während 3 [Korrektur] Situation oben genannt werden.
Hinweis: hier ist ein Screenshot für "Automatisch nach n Sekunden sperren":