2016-08-07 6 views
0

ACTION_USER_PRESENT,ACTION_SCREEN_ONおよびACTION_SCREEN_OFFをサービス内に登録しました。ここで「n秒後に自動的にロックする」とACTION_USER_PRESENTが受信されない

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); 

いくつかの状況です:私は電源ボタンを押すと、ACTION_SCREEN_ONACTION_SCREEN_OFFの両方が受信されない:

  1. なし =ユーザーズ "画面ロック" [正しいです] 。

  2. [正しい]ユーザーズ "画面ロック" = スワイプ私は電源ボタンを押すと、ロック画面が表示されているとACTION_SCREEN_ONが受信されます。ロック解除後、ACTION_USER_PRESENTが届きます。

  3. [正しい]ユーザーズ "画面ロック" = パターン/ PIN /パスワード & すぐに自動的に = をロック:私は電源ボタンを押すと、ロック画面が表示されているとACTION_SCREEN_ONが受信される。ロック解除後、ACTION_USER_PRESENTが届きます。

  4. [正しくない]ユーザーズ "画面ロック" = パターン/ PIN /パスワード & 自動的 = 15秒ロック:私は15秒後に画面をロックし、ロックを解除するとを、ロック画面が表示され、ACTION_SCREEN_ONが受信されます。ロック解除後、ACTION_USER_PRESENTが届きます。 しかし、私が画面をロックして15秒前にロックを解除すると、ロック画面は表示されません(期待通り)が、ACTION_SCREEN_ONだけが受信されます。 ACTION_USER_PRESENTは受信されません。

それでは、どのように私は、メソッドがとき(ユーザーロック解除画面)/(画面がまだロック解除されACTION_SCREEN_ON)と呼ばれることを確認することができます。

私は

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 
} 

を試みた。しかしこの方法は、上記の3 [正しい]状況中に2回呼び出されます。


は:

image

image

答えて

0

あなたはACTION_SCREEN_ONの音を聞きKeyGuardManager

を使用することができます。ここでは、 "自動的にn秒後にロック" のスクリーンショットですデバイスがロックされているかどうかを確認しますもしそうなら、ACTION_USER_PRESENTを待つか、そうでなければすぐにコードを実行してください。

関連する問題