首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >某些设备上的Android 9和10上的生物识别提示崩溃

某些设备上的Android 9和10上的生物识别提示崩溃
EN

Stack Overflow用户
提问于 2019-09-25 08:49:18
回答 3查看 3.5K关注 0票数 1

我正在使用BiometricPrompt让用户使用指纹验证来登录我在PasswordActivity类中执行了以下操作的应用程序:

代码语言:javascript
复制
     Executor executor = Executors.newSingleThreadExecutor();

    FragmentActivity activity = this;

    final BiometricPrompt biometricPrompt = new BiometricPrompt(activity, executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
            if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
                // user clicked negative button
            } else {
                //TODO: Called when an unrecoverable error has been encountered and the operation is complete.
            }
        }

        @Override
        public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            //TODO: Called when a biometric is recognized.
            final String decryptedText = decryptText();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (decryptedText != null && !decryptedText.isEmpty()) {
                        editPassword.setText(decryptedText);
                        buttonNext();
                    }
                }
            });

        }

        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
            //TODO: Called when a biometric is valid but not recognized.
        }
    });

    final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("My App"))
            .setSubtitle("Log on into the app"))
            .setNegativeButtonText("Cancel").toUpperCase())
            .build();

    if (sharedPreferenceManager.isFingerprintEnabled(this))
        biometricPrompt.authenticate(promptInfo);   

这是我得到的一个例外。我必须要设置吗?

代码语言:javascript
复制
setNegativeButton (CharSequence text, 
            Executor executor, 
            DialogInterface.OnClickListener listener) as well?

我正在使用这个版本的实现‘androidx.biometry.biometry:1.0.0-alpha03’。

代码语言:javascript
复制
Caused by java.lang.IllegalArgumentException: Executor must not be null
   at android.hardware.biometrics.BiometricPrompt$Builder.setNegativeButton + 182(BiometricPrompt.java:182)
   at androidx.biometric.BiometricFragment.onCreate + 201(BiometricFragment.java:201)
   at androidx.fragment.app.Fragment.performCreate + 2414(Fragment.java:2414)
   at androidx.fragment.app.FragmentManagerImpl.moveToState + 1418(FragmentManagerImpl.java:1418)
   at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState + 1784(FragmentManagerImpl.java:1784)
   at androidx.fragment.app.FragmentManagerImpl.moveToState + 1861(FragmentManagerImpl.java:1861)
   at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange + 3269(FragmentManagerImpl.java:3269)
   at androidx.fragment.app.FragmentManagerImpl.dispatchCreate + 3223(FragmentManagerImpl.java:3223)
   at androidx.fragment.app.FragmentController.dispatchCreate + 190(FragmentController.java:190)
   at androidx.fragment.app.FragmentActivity.onCreate + 369(FragmentActivity.java:369)
   at androidx.appcompat.app.AppCompatActivity.onCreate + 85(AppCompatActivity.java:85)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-25 09:10:05

尝试更新依赖项,当前最新版本已是发布候选版本:

代码语言:javascript
复制
implementation "androidx.biometric:biometric:1.0.0-rc01"
票数 0
EN

Stack Overflow用户

发布于 2019-10-17 02:24:44

您是否可以尝试将Executor executor = Executors.newSingleThreadExecutor();替换为:

代码语言:javascript
复制
private Handler handler = new Handler();

private Executor executor = new Executor() {
    @Override
    public void execute(Runnable command) {
        handler.post(command);
    }
};

这是根据this developer.android.com教程中给出的代码。

票数 2
EN

Stack Overflow用户

发布于 2019-09-26 13:11:31

代码语言:javascript
复制
Caused by java.lang.IllegalArgumentException: Executor must not be null
   at android.hardware.biometrics.BiometricPrompt$Builder.setNegativeButton + 182(BiometricPrompt.java:182)

这表明您正在测试的设备上的框架没有接收到来自支持库的执行器(支持库中的错误),或者框架本身有错误。

您可以尝试使用更高版本的androidx.biometric库吗?Beta02最近发布了,自从alpha03发布以来,很多东西都被修复了。

另外,你正在测试什么设备,如果它可以在Beta02上重现,你可以通过adb bugreport foo.zip获取一个错误端口,并将有错误的示例应用程序附加到公共问题tracker

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58089766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档