如何在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
}