Я использую androidx.biometric:biometric:1.0.1
, все работает нормально, но когда у меня есть устройство без биометрического датчика (или когда пользователь не установил свой отпечаток пальца и т. Д.), Я пытаюсь использовать DeviceCredentials после выполнения аутентификации мои входные данные функции недействительны.
class MainActivity : AppCompatActivity() {
private val TAG = MainActivity::class.java.name
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<View>(R.id.first).setOnClickListener {
authenticate(MyData(1, "first"))
}
findViewById<View>(R.id.second).setOnClickListener {
authenticate(MyData(2, "second"))
}
}
private fun authenticate(data: MyData) {
Log.e(TAG, "starting auth with $data")
val biometricPrompt = BiometricPrompt(
this,
ContextCompat.getMainExecutor(this),
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
Log.e(TAG, "auth done : $data")
}
})
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setDeviceCredentialAllowed(true)
.setTitle("title")
.build()
biometricPrompt.authenticate(promptInfo)
}
}
data class MyData(
val id: Int,
val text: String
)
Сначала я нажимаю кнопку first
, проверяю подлинность, затем нажимаю кнопку second
и проверяю подлинность, затем логарифм Android выглядит следующим образом:
E/com.test.biometrictest.MainActivity: starting auth with MyData(id=1, text=first)
E/com.test.biometrictest.MainActivity: auth done : MyData(id=1, text=first)
E/com.test.biometrictest.MainActivity: starting auth with MyData(id=2, text=second)
E/com.test.biometrictest.MainActivity: auth done : MyData(id=1, text=first)
как вы видите в последней строке MyData id и текст недействительны! autneticate
функция input (data) не то же самое, когда вызывается onAuthenticationSucceeded!
(если вы попытаетесь протестировать его, убедитесь, что используете DeviceCredentials, а не биометрию, я имею в виду шаблон или пароль, снимите отпечаток пальца) Почему данные не действительны в callBack?
нормально работает на android 10 или с отпечатком пальца
Я не хочу использовать onSaveInstanceState.
BiometricPrompt.AuthenticationCallback
и вместо этого создать свой класс и передать свой параметр в конструктор? или, может быть, оставить параметрMyData
как параметр действия и вместо этого получить доступ к этому параметру? - person seyed Jafari   schedule 07.01.2020FragmentManager
и того, как эта библиотека обрабатывает классCallback
. - person seyed Jafari   schedule 07.01.2020