You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android已录入生物识别类型查询及判定方法技术问询

Android已录入生物识别方式判断指南

刚好最近处理过类似的生物识别登录适配需求,我来给你梳理清楚这两个问题:

一、Android系统中常见的已录入生物识别方式及其类型

Android系统支持的生物识别方式主要分为官方标准和厂商定制两类,常见的有:

  • 指纹识别(Fingerprint):属于触摸类生物特征,从Android 6.0(API 23)开始成为官方标准,是目前应用最广泛的生物识别方式。
  • 系统级人脸识别(Face Recognition):属于视觉类生物特征,Android 10(API 29)正式纳入官方API,在此之前部分厂商(如华为、小米)通过自定义ROM实现了该功能。
  • 虹膜识别(Iris Recognition):属于视觉类生物特征,仅在少数高端机型(如三星Galaxy系列)中支持,属于厂商定制功能,无官方统一API。
  • 掌纹识别(Palm Print):部分厂商(如华为)推出的定制化识别方式,结合了触摸与视觉特征,同样为私有实现。

二、判断设备已录入的生物识别类型的方法

你的场景非常典型——仅判断设备支持某类识别是不够的,必须确认用户已经录入了对应信息才能显示正确的图标和文本。下面分版本给出可靠的实现方案:

1. Android 10(API 29)及以上版本:用BiometricManager+KeyguardManager精准判断

Android 10引入的BiometricManager可以先快速判断生物识别的整体状态,再通过KeyguardManager区分具体已录入的类型:

val biometricManager = BiometricManager.from(context)
when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)) {
    BiometricManager.BIOMETRIC_SUCCESS -> {
        // 设备支持强生物识别且已录入信息,接下来区分具体类型
        val keyguardManager = context.getSystemService(KeyguardManager::class.java)
        if (keyguardManager.isDeviceSecure) {
            val hasFingerprint = keyguardManager.hasEnrolledFingerprints()
            val hasFace = keyguardManager.hasEnrolledFaces() // 仅API 29+可用
            
            // 根据结果适配UI:比如hasFingerprint为true就显示指纹图标,hasFace为true显示人脸图标
            if (hasFace) {
                // 显示人脸登录相关UI
            } else if (hasFingerprint) {
                // 显示指纹登录相关UI
            }
        }
    }
    BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
        // 设备完全没有生物识别硬件
    }
    BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
        // 生物识别硬件暂时不可用(比如被其他进程占用)
    }
    BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
        // 设备支持生物识别,但用户还没录入任何信息,可引导用户去设置录入
    }
}

2. Android 6.0(API 23)到Android 9(API 28)版本:依赖KeyguardManager

在Android 10之前,官方仅提供了指纹识别的判断API,人脸识别需要依赖厂商私有接口:

val keyguardManager = context.getSystemService(KeyguardManager::class.java)
if (keyguardManager.isDeviceSecure) {
    // 判断是否已录入指纹
    val hasFingerprint = keyguardManager.hasEnrolledFingerprints()
    // 人脸识别需接入厂商SDK(比如小米FaceManager、华为FaceAuthHelper),无统一实现方式
}

关键注意点

  • 权限配置:别忘在AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<!-- 兼容API 23-28的指纹识别 -->
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
  • 强/弱生物识别区分BIOMETRIC_STRONG对应需要用户主动交互的识别(如指纹按压、主动人脸验证),安全性更高;BIOMETRIC_WEAK多为被动识别(比如抬手亮屏解锁),适合低安全需求场景。
  • 厂商定制识别:虹膜、掌纹这类私有功能,只能通过厂商提供的SDK来判断是否已录入,没有通用解法。

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

火山引擎 最新活动