简体   繁体   English

Android将生物识别技术更新为1.0.0-alpha04后,Android崩溃了

[英]Android crashed after updating androidx biometric to 1.0.0-alpha04

Everything works fine with 'androidx.biometric:biometric:1.0.0-alpha03' , however when I build my project with the latest 'androidx.biometric:biometric:1.0.0-alpha04' and call myBiometricPrompt.authenticate(promptInfo) it throws this exception: FragmentManager is already executing transactions . 使用'androidx.biometric:biometric:1.0.0-alpha03'一切正常,但是当我使用最新的'androidx.biometric:biometric:1.0.0-alpha04'构建我的项目并调用myBiometricPrompt.authenticate(promptInfo)它会抛出此异常: FragmentManager is already executing transactions

Here is the stacktrace: 这是堆栈跟踪:

 java.lang.IllegalStateException: FragmentManager is already executing transactions
        at androidx.fragment.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:2207)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2267)
        at androidx.fragment.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:814)
        at androidx.biometric.BiometricPrompt.authenticateInternal(BiometricPrompt.java:525)
        at androidx.biometric.BiometricPrompt.authenticate(BiometricPrompt.java:465)
        at com.my.app.ui.LoginFragment.handleTouchIdAuth(LoginFragment.kt:161)
        at com.my.app.ui.LoginFragment.onViewCreated(LoginFragment.kt:62)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1471)
        at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2646)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2416)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2372)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
        at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2466)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
        at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
        at android.app.Activity.performStart(Activity.java:7157)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Does anyone know what happened and what to do? 有谁知道发生了什么,该怎么办? For now, I'll stick with version 1.0.0-alpha03 现在,我将坚持使用版本1.0.0-alpha03

Thank you! 谢谢!

There seems to be an issue with alpha04, reverting to alpha03 fixes it. alpha04似乎存在问题,恢复alpha03修复它。 Guess we'll have to wait for alpha05 before upgrading. 猜猜我们在升级之前必须等待alpha05。

Just wish Google had waited until the biometrics library was out of alpha before deprecating the fingerprint library... 只是希望谷歌在弃用指纹库之前一直等到生物识别技术库已经超出alpha版...

The problem still exists in latest version androidx.biometric:biometric:1.0.0-beta01 . 问题仍存在于最新版本androidx.biometric:biometric:1.0.0-beta01

To fix it is to display biometricPrompt from handler: 修复它是从处理程序显示biometricPrompt:

    val promptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle(fragmentActivity.getString(title))
            .setNegativeButtonText(fragmentActivity.getString(negativeButtonText))
            .build()
    val biometricPrompt = BiometricPrompt(...)

    // display biometricPrompt from handler
    Handler().post {
        biometricPrompt.authenticate(promptInfo)
    }

The problem is fixed in androidx.biometric:biometric:1.0.0-beta01 by providing a second constructor. 问题在androidx.biometric:biometric:1.0.0-beta01通过提供第二个构造函数来修复。 Until this release, i solved the issue by reverting to alpha03 but there's an actual solution available now. 在此版本之前,我通过恢复到alpha03解决了这个问题,但现在有一个实际的解决方案。

You can find the beta01 release notes here 您可以在此处找到beta01发行说明

We've introduced a second constructor for BiometricPrompt that allows it to be hosted in a Fragment (as opposed to the existing constructor, which requires a FragmentActivity). 我们为BiometricPrompt引入了第二个构造函数,允许它托管在Fragment中(与现有的构造函数相反,后者需要FragmentActivity)。

You can find the new BiometricPrompt constructor documentation here 您可以在此处找到新的BiometricPrompt构造函数文档

BiometricPrompt(Fragment fragment, Executor executor, BiometricPrompt.AuthenticationCallback callback)

To fix, please follow the simple steps: 要修复,请按照以下简单步骤操作:

  1. Change your build.gradle to use biometric version 1.0.0-beta01 将build.gradle更改为使用生物识别版本1.0.0-beta01
  2. Use the new constructor. 使用新的构造函数。 In short, change the first argument to your fragment instead of the activity. 简而言之,将第一个参数更改为片段而不是活动。 See my code change below: 请参阅下面的代码更改:

     val biometricPrompt = BiometricPrompt(activity!!, executor, callback) // Change the above line to the below line val biometricPrompt = BiometricPrompt(this, executor, callback) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将 androidx 生命周期从 2.2.0-alpha03 更新为 alpha04 后,“androidx.transition.TransitionSet 无法转换为 android.transition.Transition” - “androidx.transition.TransitionSet cannot be cast to android.transition.Transition” after updating androidx lifecycle from 2.2.0-alpha03 to alpha04 更新到WorkManager 1.0.0-alpha09后编译错误 - Compile errors after updating to WorkManager 1.0.0-alpha09 在 Android 中使用 androidx Biometric API 进行人脸认证 - Face Authentication using androidx Biometric API in Android 在 Android 7 上实现 androidx 生物识别库后,字体缩放不起作用 - Font scaling doesn't work after implementing androidx biometric library on Android 7 在androidx生物识别提示中尝试三次失败后关闭提示? - close prompt after three failure attempts in androidx biometric prompt? 如何在我的旧 Android 项目中添加生物识别支持 ​​API (AndroidX) - How to add Biometric support API (AndroidX) in my Old Android Project 使用AndroidX生物识别最新版本进行身份验证会导致崩溃[Android] - Authenticating with AndroidX biometric latest version causes crash [Android] 链接资源丢失错误将 androidx 首选项从 1.0.0 更新到 1.1.0 - link resources missing errors updating androidx preference from 1.0.0 to 1.1.0 找不到 androidx.navigation:safe-args-gradle-plugin:1.0.0-alpha01 - Could not find androidx.navigation:safe-args-gradle-plugin:1.0.0-alpha01 我可以将 Android 支持库从 27.1.1 更新到 AndroidX 1.0.0 吗? - Can I update Android Support Library from 27.1.1 to AndroidX 1.0.0?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM