如何找到屏幕被锁定在android中

时间:2012-01-25 11:35:48

标签: android

对于我的应用程序,我需要知道屏幕已被锁定。如何检查这是有问题的。我使用了以下标志:

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

但这总是同时执行if和else part ...我必须使用哪个标志来检查屏幕?

6 个答案:

答案 0 :(得分:22)

我会尝试回答这个问题,虽然这个问题已经很久了,因为它尚未解决,可以帮助其他googlers。 ;)

首先,您必须为Intent.ACTION_SCREEN_OFF&注册一个BroadcastReceiver。 Intent.ACTION_SCREEN_ON。请注意,此接收方必须在代码中注册,并且在清单中声明时不起作用。

在您的广播接收器中,当您收到Intent.ACTION_SCREEN_ON时,您可以使用以下代码检查屏幕是否被锁定:

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

答案 1 :(得分:3)

KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);

if( myKeyManager.inKeyguardRestrictedInputMode()) {

 //screen is locked

} else {

 //screen is not locked

}

答案 2 :(得分:1)

使用操作android.intent.action.ACTION_SCREEN_OFF注册广播接收器,并在接收器的onReceive()方法中编写代码。

如果您正在使用某个活动,则在屏幕锁定时将调用onPause(),并在屏幕解锁时调用onResume()。

在你的代码中你正在检查一些标志,我不知道你会在哪里检查?是连续验证吗?如果您在应用中使用某项活动,则会执行上述步骤,只需在Android开发者网站上查看即可。

答案 3 :(得分: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();
}

答案 4 :(得分:0)

屏幕锁定和广播有广播意图。解锁。

检查如下:

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

让我知道!

答案 5 :(得分:0)

这是我做的:

如果用户已解锁屏幕,但尚未进入主屏幕或用户屏幕在通话过程中关闭,则会处理。

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