猿问

如何使用 BiometricManager 或 BiometricPrompt 检查生物识别硬件是否

我正在使用 BiometricPrompt 类实现生物识别身份验证。

  1. 在调用方法之前如何检查硬件是否可用BiometricPrompt#authenticate

  2. 如何查看是否已登记生物识别?

如何调用BiometricManager#canAuthenticate方法?我无法在 kotlin 中为 BiometricManager 类创建对象

我当前的实现如下。

    val executor = Executors.newSingleThreadExecutor()


    val biometricPrompt = BiometricPrompt(this, executor, object : BiometricPrompt.AuthenticationCallback() {


        override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {

            super.onAuthenticationError(errorCode, errString)

            Log.d("BIOMETRIC", "$errString $errorCode")


            if (BiometricPrompt.ERROR_HW_NOT_PRESENT == errorCode || BiometricPrompt.ERROR_NO_BIOMETRICS == errorCode)

                PreferenceHandler.setBiometricAvailable(this@LockActivity, false)

            else

                PreferenceHandler.setBiometricAvailable(this@LockActivity, true)

        }


        override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {

            super.onAuthenticationSucceeded(result)

        }


        override fun onAuthenticationFailed() {

            super.onAuthenticationFailed()

            Log.d("BIOMETRIC", "FAILED")

        }

    })


    val promptInfo = BiometricPrompt.PromptInfo.Builder()

            .setTitle("App title")

            .setSubtitle("")

            .setDescription("Identify yourself by Biometrics")

            .setNegativeButtonText("Use Password")

            .build()


    biometricPrompt.authenticate(promptInfo)


心有法竹
浏览 177回答 1
1回答

白板的微信

问题终于解决了BiometricManagerandroidx 库中错过了课程androidx.biometric:biometric:1.0.0-alpha04将库版本更新为androidx.biometric:biometric:1.0.0-beta01现在您可以导入androidx.biometric.BiometricManager您可以通过以下代码检查生物识别硬件的可用性并已注册生物识别:object BiometricUtil {fun isHardwareAvailable(context: Context): Boolean{    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){        val bm = BiometricManager.from(context)        val canAuthenticate = bm.canAuthenticate()        !(canAuthenticate == BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE || canAuthenticate == BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE)    } else {        false    }}fun hasBiometricEnrolled(context: Context): Boolean {    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){        val bm = BiometricManager.from(context)        val canAuthenticate = bm.canAuthenticate()        (canAuthenticate == BiometricManager.BIOMETRIC_SUCCESS)    } else {        false    }}}
随时随地看视频慕课网APP

相关分类

Java
我要回答