Недавно я переместил свой проект на AndroidX и, внедряя отпечаток пальца для приложения, использую Biometric для AndroidX.
implementation 'androidx.biometric:biometric:1.0.0-alpha03'
Когда отображается диалоговое окно для использования отпечатка пальца для аутентификации, в диалоговом окне есть опция «Отмена», установленная в качестве отрицательной кнопки.
final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("Log into App")
.setSubtitle("Please touch the fingerprint sensor to log you in")
.setDescription("Touch Sensor")
.setNegativeButtonText("Cancel".toUpperCase())
.build();
Согласно документации Android: https://developer.android.com/reference/androidx/biometric/BiometricPrompt.PromptInfo.Builder.html#setNegativeButtonText(java.lang.CharSequence)
Required: Set the text for the negative button.
This would typically be used as a "Cancel" button, but may be also used
to show an alternative method for authentication,
such as screen that asks for a backup password.
Поэтому вместо кнопки «Отмена» я могу сказать «Использовать пароль», чтобы предоставить альтернативный метод в случае сбоя отпечатка пальца, и когда пользователь нажимает на него, я могу показать другое всплывающее диалоговое окно, в котором я могу позволить пользователю ввести пароль устройства, чтобы помочь получить пароль приложения. из хранилища ключей. Это верно ?
Но что произойдет, если у меня не установлен пароль для разблокировки телефона, а я использую графический ключ?
Я вижу, что если я использую android.hardware.biometrics.BiometricPrompt.Builder вместо androidx.biometric.BiometricPrompt.PromptInfo.Builder, у него будет метод https://developer.android.com/reference/android/оборудование/биометрия/BiometricPrompt.Builder.html#setDeviceCredentialAllowed(boolean) с той же целью, чтобы пользователь мог аутентифицироваться другими способами в случае сбоя отпечатка пальца.
Может кто-нибудь помочь мне понять это? Как я могу добиться этого с помощью AndroidX, поскольку мое приложение совместимо с API 16 и далее. И почему AndroidX не использует этот резервный метод?