You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android生物识别:如何检测生物识别功能已锁定?

问题分析与解决方案

首先明确两个关键错误码的含义:

  • errorCode 7 对应 BiometricPrompt.ERROR_LOCKOUT,即生物识别因多次失败被临时锁定;
  • canAuthenticate 返回的状态码11对应 BiometricManager.BIOMETRIC_ERROR_NO_BIOMETRICS,这是系统在生物识别锁定时的特殊行为——暂时屏蔽已注册的生物特征,导致接口返回"未注册"。

可行的判断方式

  1. 直接通过AuthenticationCallback的错误码判断
    这是最准确的方式,在onAuthenticationError中捕获锁定相关错误码:

    override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
        super.onAuthenticationError(errorCode, errString)
        when(errorCode) {
            BiometricPrompt.ERROR_LOCKOUT -> {
                // 生物识别临时锁定,一段时间后自动解锁
                finishActivity("生物识别已临时锁定", errorCode)
            }
            BiometricPrompt.ERROR_LOCKOUT_PERMANENT -> {
                // 生物识别永久锁定,需通过PIN/图案/密码解锁设备后恢复
                finishActivity("生物识别已永久锁定,请解锁设备后重试", errorCode)
            }
            else -> {
                finishActivity(errString.toString(), errorCode)
            }
        }
    }
    
  2. 结合历史注册状态辅助判断
    由于锁定期间canAuthenticate会返回11,可通过本地存储记录设备是否曾注册过生物特征:

    • 首次启动App或用户完成生物识别设置时,调用一次canAuthenticate,若返回BiometricManager.BIOMETRIC_SUCCESS,则在SharedPreferences中标记"已注册生物特征";
    • 后续若canAuthenticate返回11,但本地标记为已注册,且近期有生物识别失败的记录,即可推断是锁定导致的,而非真的未注册。

补充说明

系统在生物识别锁定时返回11是保护机制,目的是防止恶意程序通过反复调用canAuthenticate探测锁定状态。因此,优先依赖AuthenticationCallback的错误码是最可靠的方案。

内容的提问来源于stack exchange,提问作者Allen Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:03:20