Отключено Блокировка клавиатуры снова включается после нажатия на уведомление (Android)
На этот вопрос до сих пор нет ответа??? В моем приложении я отключаю блокировку клавиатуры (то есть снимаем экран блокировки), используя приведенный ниже код, и она работает нормально, пока я не нажму на любое уведомление в панели уведомлений. Если я нажму на уведомление, экран блокировки автоматически снова включится. Любая помощь приветствуется.
private void remove_lockscreen() {
final CheckBoxPreference lock = (CheckBoxPreference) findPreference("remove_lockscreen");
KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
KeyguardLock kl = km.newKeyguardLock("keyguard_lock");
if (lock.isChecked()) {
prefEdit("remove_lockscreen", 1);
Toast.makeText(getBaseContext(), "Lockscreen will not be shown", Toast.LENGTH_SHORT).show();
kl.disableKeyguard();
}
else if (!lock.isChecked()) {
prefEdit("remove_lockscreen", 0);
Toast.makeText(getBaseContext(), "Lockscreen will be shown", Toast.LENGTH_SHORT).show();
kl.reenableKeyguard();
android.os.Process.killProcess(android.os.Process.myPid());
}
}
и я использовал этот код Disabled Keyguard Lock снова включает себя после нажатия на уведомление, но никогда не работает!!?? любая помощь
1 ответ
API KeyguardLock устарел с уровня API Android 13: http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
Вы пытаетесь сделать это на устройстве Note 4, уровень API Android которого превышает 13. Поэтому теперь он будет работать.
Попробуйте это для проблемы 1:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
this.getWindow().setType(WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
this.getWindow().setType(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
Проблема 2: Блокировка повторно включается при нажатии на уведомление - это происходит потому, что при нажатии на уведомление запускается новое приложение и ваше приложение отправляется в фоновый режим. Таким образом, он теряет контроль над блокировкой, которая была отключена им, и блокировка повторно включается системой. Вы вызываете finish() в своем приложении?