【发布时间】:2021-03-12 19:09:57
【问题描述】:
在我的应用中,我使用的是 androidX 生物识别支持库 1.1.0。在所有 Android 版本上,我的应用程序都崩溃了。这是我用过的代码sn-p
例外:
java.lang.IllegalStateException: 必须从片段宿主的主线程调用
在:
public boolean isFingerprintAuthAvailable(Context mContext) {
BiometricManager biometricManager = BiometricManager.from(mContext);
if (biometricManager.canAuthenticate() == BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE) {
return false;
} else if (biometricManager.canAuthenticate() == BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE) {
return false;
} else if (biometricManager.canAuthenticate() == BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED) {
return false;
} else if (biometricManager.canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
return true;
}
return false;
}
BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("fingerPrintTitle")
.setDescription("Description")
.setNegativeButtonText(""negative text")
.build();
if (isFingerprintAuthAvailable(mContext)) {
mBiometricPrompt.authenticate(promptInfo, cryptoObject);
}
【问题讨论】:
-
你读过错误信息吗?
-
是的,我做到了。崩溃是从 FragmentManager 类引发的。
-
你发布的代码是无用的,因为它在哪里运行是未知的......正如错误消息提示的那样。
-
@MartinZeitler 感谢您的回复。我得到了答案。我在 Webview 上调用了 authenticate() 方法。并且 Webview 使用 JavascriptInterface 来发布消息。我移动了 mBiometricPrompt.authenticate(promptInfo, cryptoObject);使用 runOnUiThread stackoverflow.com/questions/4325639/… 到 UI 线程
标签: android android-fragments android-fingerprint-api android-biometric-prompt android-biometric