【问题标题】:Crash using biometric androidx library使用生物识别 androidx 库崩溃
【发布时间】:2020-02-01 14:35:47
【问题描述】:

在我的应用中,我使用的是 androidx 生物识别支持库 1.0.1。在 Android 9 上我可以看到这种错误,但我不知道它们来自哪里::

02-01 13:00:06.422 23937 23937 E AndroidRuntime: FATAL EXCEPTION: main
02-01 13:00:06.422 23937 23937 E AndroidRuntime: Process: xxxxxxx, PID: 23871
02-01 13:00:06.422 23937 23937 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.hardware.fingerprint.FingerprintManager.getErrorString(int, int)' on a null object reference
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at android.hardware.biometrics.BiometricPrompt.lambda$sendError$0(BiometricPrompt.java:490)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at android.hardware.biometrics.-$$Lambda$BiometricPrompt$HqBGXtBUWNc-v8NoHYsj2gLfaRw.run(Unknown Source:6)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:873)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:193)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:6672)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
02-01 13:00:06.422 23937 23937 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)

代码:

        KeyguardManager km = (KeyguardManager) getContext().getSystemService(KEYGUARD_SERVICE);
        BiometricPrompt.Builder builder = new BiometricPrompt.Builder(getContext().getApplicationContext());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            builder.setConfirmationRequired(true);
            if (km != null && km.isDeviceSecure()) {
                builder.setDeviceCredentialAllowed(true);
            } else {
                builder.setNegativeButton(getContext().getResources().getString(android.R.string.cancel), getContext().getApplicationContext().getMainExecutor(), (dialog, which) -> {
                //something
                });
            }
        } else {
            builder.setNegativeButton(getContext().getResources().getString(android.R.string.cancel), getContext().getApplicationContext().getMainExecutor(), (dialog, which) -> {
                //something
            });
        }
        builder.setDescription(getContext().getResources().getString(R.string.confirm_pin));
        builder.setTitle(getContext().getResources().getString(R.string.modify_pin));
        BiometricPrompt prompt = builder.build();
        prompt.authenticate(new CancellationSignal(), getContext().getMainExecutor(), new BiometricPrompt.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode, CharSequence errString) {
            }

            @Override
            public void onAuthenticationFailed() {
            }
        });

【问题讨论】:

  • 看起来像this issue。引用那里的最后一条评论,“您能否仔细检查您是否正在调用 androidx.biometric.BiometricManager#canAuthenticate() 并且仅在结果为 BIOMETRIC_SUCCESS 时才调用身份验证?”
  • @CommonsWare 是的,这似乎是同样的问题,不,我没有调用那个方法。
  • @greywolf82 你找到解决这个崩溃问题的方法了吗?
  • 是的,我刚刚使用了问题跟踪器中的检查
  • 你能解释一下你是怎么解决这个问题的吗?

标签: android android-biometric-prompt


【解决方案1】:

显然,Google 修复了生物识别库 Version 1.1.0-beta01 中的错误。

修复了 BiometricPrompt 在一些没有指纹传感器的 Android 9 设备上导致崩溃的问题。 (b/151443237)

注意1.1.0 在 21 年 1 月 27 日达到稳定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多