Как найти экран заблокирован в android

Для моего приложения мне нужно знать, что экран заблокирован. Как проверить это в проблемной ситуации. Я использовал следующий флаг:

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

Но это всегда выполняется как if, так и другая часть … какой флаг я должен использовать для проверки экрана заблокирован или нет?

Solutions Collecting From Web of "Как найти экран заблокирован в android"

Я постараюсь ответить на это, хотя вопрос уже старый, так как он не решен и может помочь другим гуглерам. 😉

Сначала вы должны зарегистрировать BroadcastReceiver для Intent.ACTION_SCREEN_OFF & Intent.ACTION_SCREEN_ON. Обратите внимание, что этот приемник должен быть зарегистрирован в кодах и не будет работать, если он объявлен в манифесте.

В вашем широковещательном приемнике, когда вы получаете Intent.ACTION_SCREEN_ON, вы можете проверить, заблокирован ли экран, используя приведенные ниже коды:

 KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); boolean locked = km.inKeyguardRestrictedInputMode(); 
 KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); if( myKeyManager.inKeyguardRestrictedInputMode()) { //screen is locked } else { //screen is not locked } 

Зарегистрируйте широковещательный приемник с действием android.intent.action.ACTION_SCREEN_OFF и напишите свой код в методе onReceive () получателя.

Если вы используете операцию, onPause () вызывается, когда экран заблокирован и onResume () будет вызываться при разблокировке экрана.

В вашем коде вы проверяете некоторые флаги, я не знаю, где вы будете делать эту проверку? Это непрерывная проверка? Если вы используете активность в своем приложении, описанная выше процедура будет проверена на веб-сайте Android Developers.

Я думаю, вы, возможно, уже нашли ответ, но если нет (и для других разработчиков), вы можете сделать это следующим образом:

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

Существуют трансляции намерений для блокировки и разблокировки экрана.

Проверьте это как:

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

Дай мне знать!

Вот что я сделал:

Это обрабатывается, если пользователь разблокировал экран, но еще не вошел в главный экран, или экран пользователя отключен во время разговора.

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