2016-09-26 9 views
12

У меня есть функция для определения четырех состояний экрана телефона: экран включен, экран выключен, экран включен с блокировкой, экран включен без блокировки. Моя функцияВозврат результата сбоя inKeyguardRestrictedInputMode()

private KeyguardManager keyguardManager; 
public String getScreenStatus() 
{ 
    String sreen_State="unknown"; 
    keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { 
     if (pm.isInteractive()) { 
      sreen_State="screen_on"; 
      if(!keyguardManager.inKeyguardRestrictedInputMode()) { 
       sreen_State="screen_on_no_lock_screen"; 

      }else{ 
       Log.i(TAG, "screen_on_lock_screen"); 
       sreen_State="screen_on_lock_screen"; 
      } 
     } 
     else { 
      sreen_State="screen_off"; 
     } 
    } 
    else if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH){ 
     if(pm.isScreenOn()){ 
      sreen_State="screen_on"; 
      if(!keyguardManager.inKeyguardRestrictedInputMode()) { 
       Log.i(TAG, "screen_on_no_lock_screen"); 
       sreen_State="screen_on_no_lock_screen"; 

      }else{ 
       Log.i(TAG, "screen_on_lock_screen"); 
       sreen_State="screen_on_lock_screen"; 
      } 

     } 
     else { 
      mIsScreenOn=false; 
      sreen_State="screen_off"; 
     } 
    } 
    return sreen_State; 
} 

Вышеуказанная функция возвращает скорректированные состояния экрана. Однако у меня есть ошибка, когда я добавляю еще один код следующим образом:

KeyguardManager.KeyguardLock 
kl = keyguardManager.newKeyguardLock("MyKeyguardLock"); 
if(index.equals("1")) 
     kl.disableKeyguard(); 
    else if(indexequals("2")) 
     kl.reenableKeyguard(); 
    getScreenStatus(); 

Индекс можно изменить, нажав на кнопку. Теперь происходит неправильное состояние экрана. Он всегда возвращает screen_on_lock_screen, хотя экран находится в screen_on_no_lock_screen. Как я могу исправить свою проблему?

+0

Можете ли вы добавить код? Какой класс и метод содержит второй фрагмент кода? – Vall0n

ответ

2

с использованием KeyguardManager.NewKeyguardLock устарел с API уровня 13. Пробовал ли вы его с FLAG_DISMISS_KEYGUARD и FLAG_SHOW_WHEN_LOCKED из WindowManager.LayoutParams.

Этот класс был устаревшим в уровне API 13. Использование FLAG_DISMISS_KEYGUARD и/или FLAG_SHOW_WHEN_LOCKED вместо; это позволяет вам легко скрывать блокировку клавиатуры, когда ваше приложение перемещается в и из> переднего плана и не требует, чтобы запрашивались какие-либо специальные разрешения. > Ручка, возвращаемая newKeyguardLock (String), которая позволяет отключить /> повторно активировать блокировку клавиатуры.

Здесь ссылка содержит Android documentation.

Надеюсь, это поможет!