对于我的应用程序,我需要知道屏幕已被锁定。如何检查这是有问题的。我使用了以下标志:
if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){
// some code
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){
// some code
}
但这总是同时执行if和else part ...我必须使用哪个标志来检查屏幕?
答案 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;
}
}