简体   繁体   English

使用生物识别 androidx 库时崩溃

[英]Crash using biometric androidx library

In my app I'm using androidx biometric support library 1.0.1.在我的应用程序中,我使用的是 androidx 生物识别支持库 1.0.1。 On Android 9 I can see this kind of bug but I have no idea where they come from::在 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)

Code:代码:

        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() {
            }
        });

Apparently Google fixed the Bug in Version 1.1.0-beta01 of the Biometric library.显然,Google 修复了 Biometric 库1.1.0-beta01 版本中的错误。

Fixed an issue where BiometricPrompt caused a crash on some Android 9 devices without a fingerprint sensor.修复了 BiometricPrompt 在某些没有指纹传感器的 Android 9 设备上导致崩溃的问题。 (b/151443237) (b/151443237)

Note : 1.1.0 hit stable on 27th January '21注意1.1.0在 21 年 1 月 27 日达到稳定

Biometric support library 1.0.1.生物识别支持库 1.0.1。 On Android 9 because Some device don't have Biometric Sensor.在 Android 9 因为有些设备没有生物识别传感器。 You can follow below steps.您可以按照以下步骤操作。

  1. Check Biometric Support or not检查生物识别支持与否

    private fun checkBiometricSupportOrNot():Boolean {私人乐趣 checkBiometricSupportOrNot():Boolean {

     val keyguardManager: KeyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager if (.keyguardManager.isKeyguardSecure) { notifyUser("Fingerprint hs not been enabled in settings.") return false } if (ActivityCompat,checkSelfPermission( this. android.Manifest.permission.USE_BIOMETRIC ).= PackageManager.PERMISSION_GRANTED ) { notifyUser("Fingerprint hs not been enabled in settings.") return false } return if (packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) true else true

    } }

2> Check conduction in click event 2> 在点击事件中检查导通

  tvLogin.setOnClickListener {

        if (checkBiometricSupportOrNot()){
            val biometricPrompt : BiometricPrompt = BiometricPrompt.Builder(this)
                .setTitle("Title")
                .setSubtitle("Authenticaion is required")
                .setDescription("Fingerprint Authentication")
                .setNegativeButton("Cancel", this.mainExecutor) { _, _ ->
                }.build()
            biometricPrompt.authenticate(getCancellationSignal(), mainExecutor, authenticationCallback)
        }else{
            notifyUser("Fingerprint hs not been enabled in settings.")
        }
    }

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

相关问题 使用生物识别 androidX 库 1.1.0 崩溃 - Crash using biometric androidX library 1.1.0 如果仅安装了面部作为生物特征,则使用 AndroidX.Biometric 的 KeyGeneration 会失败 - KeyGeneration using AndroidX.Biometric fails if only face as biometric is installed 在 Android 中使用 androidx Biometric API 进行人脸认证 - Face Authentication using androidx Biometric API in Android 使用AndroidX生物识别最新版本进行身份验证会导致崩溃[Android] - Authenticating with AndroidX biometric latest version causes crash [Android] 检测androidx生物识别库中是否添加或删除了新指纹 - Detect if new finger print added or removed in androidx biometric library 当从属库使用AndroidX库时,使用Android支持库的Android Project崩溃 - Android Project using Android Support libraries crash, when a dependant library uses AndroidX library 在 Android 7 上实现 androidx 生物识别库后,字体缩放不起作用 - Font scaling doesn't work after implementing androidx biometric library on Android 7 使用 androidx 生物识别提示检查设备是否启用了生物识别 - Check if devices has biometric enabled with androidx biometric prompt 库应该使用androidx还是android.support? - Should library be using androidx or android.support? 使用 Glide 库时崩溃 - Crash on using Glide library
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM