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

如何在android中找到锁定的屏幕,android,Android,对于我的应用程序,我需要知道屏幕已锁定。如何检查这是有问题的。我使用了以下标志: if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){ // some code }else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){ // some code } 但这总是同时执行if和else部分。。。我必须使用哪个标志来检查屏幕是否锁定?使用actionand

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

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

但这总是同时执行if和else部分。。。我必须使用哪个标志来检查屏幕是否锁定?

使用action
android.intent.action.action\u screen\u OFF注册广播接收器,并在接收器的onReceive()方法中写入代码

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


在您的代码中,您正在检查一些标志,我不知道您将在哪里进行检查?是持续核查吗?如果您正在应用程序中使用某个活动,则会发生上述过程,只需在Android开发者网站上查看即可。

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

检查它,如:

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

让我知道

我会尝试回答这个问题,尽管这个问题已经很老了,因为它还没有解决,可能会帮助其他谷歌用户

首先,必须为Intent.ACTION\u SCREEN\u关闭和Intent.ACTION\u SCREEN\u打开注册广播接收器。请注意,此接收器必须在代码中注册,并且在清单中声明时将不起作用

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

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean locked = km.inKeyguardRestrictedInputMode();
以下是我所做的:

如果用户已解锁屏幕,但尚未进入主屏幕,或者用户的屏幕已关闭(例如在通话过程中),则此功能将进行处理

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

我想您可能已经找到了答案,但如果没有(对于其他开发人员来说),您可以这样做:

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

请参阅以下链接[[[1]:[2]:[3]:它将如何执行if和else?@Babu:非常感谢您的回答。我将尝试:)上述条件应在Braodcast receiver中检查?下面的链接似乎不需要Broadcast receiver
KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);

if( myKeyManager.inKeyguardRestrictedInputMode()) {

 //screen is locked

} else {

 //screen is not locked

}