2016-08-07 44 views
0

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:

  1. [Korrektur]Benutzerhandbuch "Bildschirmsperre" = Keine: Wenn ich Power-Taste drücken, wird sowohl ACTION_SCREEN_ON und ACTION_SCREEN_OFF empfangen .

  2. [Korrektur]Benutzerhandbuch "Bildschirmsperre" = Swipe: Wenn ich Power-Taste drücken, wird der Sperrbildschirm angezeigt und ACTION_SCREEN_ON empfangen wird. Nach dem Entsperren wird ACTION_USER_PRESENT empfangen.

  3. [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 wird ACTION_USER_PRESENT empfangen.

  4. [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 wird ACTION_USER_PRESENT empfangen. Aber wenn ich den Bildschirm sperren und vor 15 Sekunden entsperren, wird (wie erwartet) kein Sperrbildschirm angezeigt, sondern nur ACTION_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

versucht
KeyguardManager 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":

image

image

Antwort

0

Sie konnten die für ACTION_SCREEN_ON

Anhören KeyGuardManager verwenden und dann überprüfen, ob das Gerät gesperrt ist Wenn ja, warte auf ACTION_USER_PRESENT, ansonsten führe deinen Code sofort aus.