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();
       }
    }
}
Другие вопросы по тегам