KeyguardManager - альтернатива метода requestDismissKeyguard() для API 25 и ниже [Android]
Недавно я пытался попросить пользователя вручную отключить защиту ключей из моего приложения. Мое приложение вызывает экран активности, когда устройство заблокировано, и на экране есть флаги
FLAG_SHOW_WHEN_LOCKED
FLAG_TURN_SCREEN_ON
Когда мне нужно вызвать другой экран, на котором нет этих флагов, я хочу попросить пользователя разблокировать защиту клавиатуры, такое поведение можно увидеть в приложении камеры - когда мы хотим поделиться фотографией, сделанной, когда телефон заблокирован. попросит нас разблокировать устройство.
Метод requestDismissKeyguard() работает только для api26 и выше любых альтернатив для нижнего apis??
3 ответа
Вы можете использовать флаги для более низких версий
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(this, null)
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
}
Дополнительные примеры см. здесь .
Вы можете использовать createConfirmDeviceCredentialIntent на уровне API 21
https://developer.android.com/reference/android/app/KeyguardManager.html
образец:
//region [in some funtion]
if (keyguardManager.isKeyguardLocked()) {
Intent intent = keyguardManager.createConfirmDeviceCredentialIntent("My Title", "A Custom Description");
if (intent != null) {
startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
}else{
Toast.makeText(MainActivity.this, "Secure lock screen hasn't set up", Toast.LENGTH_SHORT).show();
}
}
//endregion
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
if (resultCode == RESULT_OK) {
Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
}
}
}