【问题标题】:How to find the screen is locked in android如何在android中找到屏幕被锁定
【发布时间】:2012-01-25 11:35:47
【问题描述】:

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

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

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

【问题讨论】:

标签: android


【解决方案1】:

我会尝试回答这个问题,尽管这个问题已经很老了,因为它尚未解决并且可以帮助其他谷歌用户。 ;)

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

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

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

【讨论】:

【解决方案2】:
KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);

if( myKeyManager.inKeyguardRestrictedInputMode()) {

 //screen is locked

} else {

 //screen is not locked

}

【讨论】:

    【解决方案3】:

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

    如果你使用的是activity,屏幕锁定时会调用onPause(),屏幕解锁时会调用onResume()。

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

    【讨论】:

    • @Babu:非常感谢您的回答。我会尝试:)
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      像这样检查:

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

      告诉我!

      【讨论】:

      • 以上情况应该在Braodcast接收器中检查?
      【解决方案6】:

      这是我所做的:

      如果用户已解锁屏幕,但尚未进入主屏幕,或者在通话期间用户的屏幕已关闭,则此处理。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-10
        • 2014-03-05
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多