BiometricPrompt(beta-01)-呼叫站点#3引导程序方法的异常

时间:2019-09-05 18:34:13

标签: android biometrics

我正在尝试在我的Android应用中使用BiometricPrompt进行指纹认证。我的代码中没有错误,但是在我运行它时:

  

java.lang.BootstrapMethodError:呼叫站点#3引导程序异常   方法

这是我的活动

 package com.arfmann.accountmanager

import androidx.biometric.*
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentActivity
import kotlinx.android.synthetic.main.activity_fingerprint.*
import java.util.concurrent.Executors

class FingerprintActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_fingerprint)

        val executor = Executors.newSingleThreadExecutor()
        val activity: FragmentActivity = this // reference to activity
        val biometricPrompt = BiometricPrompt(
            activity,
            executor,
            object : BiometricPrompt.AuthenticationCallback() {

                override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                    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 fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                    super.onAuthenticationSucceeded(result)
                    TODO("Called when a biometric is recognized.")
                }

                override fun onAuthenticationFailed() {
                    super.onAuthenticationFailed()
                    TODO("Called when a biometric is valid but not recognized.")
                }
            })

        val promptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle("Set the title to display.")
            .setSubtitle("Set the subtitle to display.")
            .setDescription("Set the description to display")
            .setNegativeButtonText("Negative Button")
            .build()

        authenticateButton.setOnClickListener {
            biometricPrompt.authenticate(promptInfo)
        }
    }
}

这是完整的错误:

  
    

E / Android运行时:致命异常:主要         流程:com.arfmann.accountmanager,PID:21973         java.lang.BootstrapMethodError:呼叫站点#3引导程序方法异常             在androidx.biometric.BiometricFragment。(BiometricFragment.java:86)             在androidx.biometric.BiometricFragment.newInstance(BiometricFragment.java:187)             在androidx.biometric.BiometricPrompt.authenticateInternal(BiometricPrompt.java:681)             在androidx.biometric.BiometricPrompt.authenticate(BiometricPrompt.java:658)             在com.arfmann.accountmanager.FingerprintActivity $ onCreate $ 1.onClick(FingerprintActivity.kt:52)             在android.view.View.performClick(View.java:6663)             在android.view.View.performClickInternal(View.java:6635)             在android.view.View.access $ 3100(View.java:794)             在android.view.View $ PerformClick.run(View.java:26199)             在android.os.Handler.handleCallback(Handler.java:907)             在android.os.Handler.dispatchMessage(Handler.java:105)             在android.os.Looper.loop(Looper.java:216)             在android.app.ActivityThread.main(ActivityThread.java:7625)             在java.lang.reflect.Method.invoke(本机方法)             在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:524)             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)          原因:java.lang.ClassCastException:Bootstrap方法返回null             在androidx.biometric.BiometricFragment。(BiometricFragment.java:86)             在androidx.biometric.BiometricFragment.newInstance(BiometricFragment.java:187)             在androidx.biometric.BiometricPrompt.authenticateInternal(BiometricPrompt.java:681)             在androidx.biometric.BiometricPrompt.authenticate(BiometricPrompt.java:658)             在com.arfmann.accountmanager.FingerprintActivity $ onCreate $ 1.onClick(FingerprintActivity.kt:52)             在android.view.View.performClick(View.java:6663)             在android.view.View.performClickInternal(View.java:6635)             在android.view.View.access $ 3100(View.java:794)             在android.view.View $ PerformClick.run(View.java:26199)             在android.os.Handler.handleCallback(Handler.java:907)             在android.os.Handler.dispatchMessage(Handler.java:105)             在android.os.Looper.loop(Looper.java:216)             在android.app.ActivityThread.main(ActivityThread.java:7625)             在java.lang.reflect.Method.invoke(本机方法)             在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:524)             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

  

我已经为我的build.gradle添加了正确的依存关系:

    implementation 'androidx.biometric:biometric:1.0.0-beta01'
这种情况仅在BETA-01,ALPHA-03中有效

2 个答案:

答案 0 :(得分:3)

在build.gradle中设置Java 8

compileOptions {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}

答案 1 :(得分:2)

我们已经意识到了这一问题,并在beta02版本(已于9月18日左右发布)中解决了该问题。

库已更新为不使用lambda。