[英]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.0.0-beta01
1.0.0-beta01
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.