2012-01-25 11 views
13

私のアプリケーションでは、画面がロックされていることを知る必要があります。これをチェックするには問題があります。画面がロックされていることを確認するには

if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){ 
    // some code 
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){ 
    // some code 
} 

しかし、この場合、他の部分...私は画面がロックされたりされていませんチェックするために使用しなければならないフラグの両方常に実行:?私は次のフラグを使用しましたか

+0

以下のリンク を参照してください。 [0123][http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked][2] [http://stackoverflow.com/questions/3446202/android-detect- [3] [1]:http:// stackoverflow [1]:電話ロック解除イベント非スクリーンオン[3]:http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked [2]:http: //stackoverflow.com/questions/3446202/android-detect-phone-unlock-event-not-screen-on – Shruti

+5

ifとelseの両方をどのように実行するのですか? –

+0

http://stackoverflow.com/questions/8968265/android-auto-logout-when-app-goes-to-background/8968763#8968763 –

答えて

1

アクションandroid.intent.action.ACTION_SCREEN_OFFで放送受信機を登録し、受信機のonReceive()メソッドでコードを書いてください。

アクティビティを使用している場合、画面がロックされているときにonPause()が呼び出され、画面がロック解除されているときにonResume()が呼び出されます。

あなたのコードではいくつかのフラグをチェックしていますが、そのチェックをどこで行うのか分かりません。それは継続的な検証ですか?アプリでアクティビティを使用している場合は、上記の手順が行われます。Android Developersのウェブサイトで確認してください。

+0

@Babu:ありがとうございました。私は試してみます:) – Prasad

0

スクリーンロックのブロードキャストインテントがあります。&ロックが解除されています。

は好きなことを確認します。

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){//LOGIC Here} 

は、私を知ってみましょう!

+0

上記の条件は、ブラッドキャスト受信機でチェックする必要がありますか? – Prasad

+0

:私は同じものを使用しましたが、動作しませんでした。( – Prasad

22

未解決で他のGoogle社員を助けるかもしれないので、質問は既に古くなっていますが、私はこれに答えようとします。 ;)

まずIntent.ACTION_SCREEN_OFF & Intent.ACTION_SCREEN_ONのBroadcastReceiverを登録する必要があります。このレシーバはコードで登録されていなければならず、マニフェストで宣言されても機能しません。ここで

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
boolean locked = km.inKeyguardRestrictedInputMode(); 
+1

以下のリンクは必要ありませんBroadcastReceiver http://stackoverflow.com/a/8668648/401403 – Arash

0

は私がやったことです:

これがあればハンドルあなたがIntent.ACTION_SCREEN_ONを受信したとき、画面が以下のコードを使用してロックされている場合、あなたは確認することができ、あなたの放送受信機で

、ユーザは画面をロック解除しているが、まだホーム画面に入っていないか、または通話中にユーザの画面がオフになっている。

  if (Intent.ACTION_SCREEN_ON.equals(pIntent.getAction()) || 
        Intent.ACTION_USER_PRESENT.equals(pIntent.getAction())) { 
       if(mListener!=null) { 
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); 
        boolean locked = km.inKeyguardRestrictedInputMode(); 
        Log.v(TAG, ": Phone lock state from KEYGUARD_SERVICE: Current state:" + (locked ? "LOCKED":"UNLOCKED")); 
        mIsPhoneLocked = locked; 
       } 
      } 
1

私はあなたが既に答えを発見したかもしれないが、(他の開発者のための)ではない場合、あなたはこのようにそれを行うことができますね。

   PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
       boolean isScreenOn = powerManager.isScreenOn(); 

if (!isScreenOn) { 
      //Screen is in OFF State 
      //Code to power on and release lock 



       KeyguardManager km = (KeyguardManager) this 
       .getSystemService(Context.KEYGUARD_SERVICE); 
       final KeyguardManager.KeyguardLock kl = km 
       .newKeyguardLock("MyKeyguardLock"); 
       kl.disableKeyguard(); 

       PowerManager pm = (PowerManager) this 
       .getSystemService(Context.POWER_SERVICE); 
       WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP 
       | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
       wakeLock.acquire(); 
} 
3
KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 

if(myKeyManager.inKeyguardRestrictedInputMode()) { 

//screen is locked 

} else { 

//screen is not locked 

} 
関連する問題