Исполнитель BiometricPrompt и / или обратный вызов были нулевыми - PullRequest
1 голос
/ 08 октября 2019

Я использую BiometricPrompt из androidx.biometric:biometric:1.0.0-beta02 для процесса аутентификации. Но я сталкиваюсь с очень странной проблемой.

При первом звонке biometricsPromt.authenticate() все работает нормально, библиотека показывает мне экран в зависимости от того, какой метод безопасности установлен (шаблон, отпечаток пальца, пароль и т. Д.), Затем обратный вызовпозвонил и все хорошо.

Проблема в том, что когда я звоню biometricsPromt.authenticate() во второй раз, я получаю сообщение об ошибке:

E / DeviceCredentialHandler: onCreate: Executor и / или обратный вызов был нулевым!

Я передаю executor и callback, конечно -> они не равны нулю

Кто-нибудь сталкивается с той же проблемой или имеет какое-то представление, в чем может быть проблема?

Вот как я создаю BiometricPromt

`

companion object {
        private val executor: Executor by lazy {
            Executors.newSingleThreadExecutor()
        }

        fun showBiometricsPrompt(
            activity: FragmentActivity,
            callback: BiometricPrompt.AuthenticationCallback
        ): BiometricPrompt {
            val promptInfo = BiometricPrompt.PromptInfo.Builder()
                .setTitle(activity.getString(R.string.title_authentication))
                .setDescription(activity.getString(R.string.msg_authenticate_first))
                .setDeviceCredentialAllowed(true)
                .build()

            val biometricPrompt =
                BiometricPrompt(
                    activity,
                    executor, callback
                )
            biometricPrompt.authenticate(promptInfo)
            return biometricPrompt
        }

`

А вот как я назвал:

`

BiometricsHelper.showBiometricsPrompt(
                this,
                object : BiometricPrompt.AuthenticationCallback() {
                    override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                        super.onAuthenticationError(errorCode, errString)

                        showToastMsg(errString.toString())
                    }

                    override fun onAuthenticationFailed() {
                        super.onAuthenticationFailed()
                    }

                    override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                        super.onAuthenticationSucceeded(result)

                    }
                })

`

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вот решение этой проблемы, но не полное исправление.

Вам нужно позвонить recreate() после того, как вы закончите делать то, что вы намеревались сделать после аутентификации.

Этоперезапустит действие и позволит снова отобразить биометрическое приглашение.

0 голосов
/ 17 октября 2019

На каком устройстве вы тестируете? Можете ли вы отправить сообщение об ошибке на общедоступный трекер Issetracker здесь с обоими

  1. adb bugreport foo.zip
  2. , в идеале .zip примера приложения, которое воспроизводит проблему?
...