Подтвердить что ты не робот

Возвратите результат сбоя в 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. Как я могу исправить свою проблему?

4b9b3361

Ответ 1

с использованием 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.

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