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

如何在Kotlin或Flutter中检测设备是否支持Face ID或指纹识别

检测Android设备指纹/面部识别支持的方法

Kotlin原生实现

检测指纹识别(兼容旧API)

你已有的指纹检测方法基于旧版FingerprintManager,可继续使用,也可适配新版Biometric API优化:

private fun hasFingerprintAuth(context: Context): Boolean {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val fingerprintManager = context.getSystemService(Context.FINGERPRINT_SERVICE) as FingerprintManager?
        fingerprintManager?.isHardwareDetected == true && fingerprintManager.hasEnrolledFingerprints()
    } else {
        false
    }
}

检测面部识别(API 28+)

Android从API 28(Android 9)开始提供面部识别相关能力,可通过PackageManager检测硬件支持,再通过FaceManager验证是否已录入面部信息:

private fun hasFaceAuth(context: Context): Boolean {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) return false
    
    val packageManager = context.packageManager
    // 检查设备是否具备面部识别硬件
    val hasFaceHardware = packageManager.hasSystemFeature(PackageManager.FEATURE_FACE)
    if (!hasFaceHardware) return false
    
    // 检查是否已录入面部模板
    val faceManager = context.getSystemService(Context.FACE_SERVICE) as FaceManager?
    return faceManager?.hasEnrolledTemplates() == true
}

区分生物识别类型

若需同时检测并区分指纹/面部识别,可封装为统一方法:

private fun getSupportedBiometricType(context: Context): Int {
    val biometricManager = BiometricManager.from(context)
    val authResult = biometricManager.canAuthenticate(
        BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.BIOMETRIC_STRONG
    )
    if (authResult != BiometricManager.BIOMETRIC_SUCCESS) return 0

    val packageManager = context.packageManager
    // 优先检测面部识别
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        val faceManager = context.getSystemService(Context.FACE_SERVICE) as FaceManager?
        if (packageManager.hasSystemFeature(PackageManager.FEATURE_FACE) && faceManager?.hasEnrolledTemplates() == true) {
            return 2 // 面部识别
        }
    }
    // 检测指纹识别
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val fingerprintManager = context.getSystemService(Context.FINGERPRINT_SERVICE) as FingerprintManager?
        if (packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT) && fingerprintManager?.hasEnrolledFingerprints() == true) {
            return 1 // 指纹识别
        }
    }
    return 0 // 无可用生物识别
}

// 常量定义
private const val BIOMETRIC_NONE = 0
private const val BIOMETRIC_FINGERPRINT = 1
private const val BIOMETRIC_FACE = 2

Flutter实现

使用官方local_auth插件可直接获取设备支持的生物识别类型,无需手动编写MethodChannel适配:

  1. 添加依赖到pubspec.yaml:
dependencies:
  local_auth: ^2.1.6 # 可使用最新稳定版本
  1. 检测生物识别类型的代码:
import 'package:local_auth/local_auth.dart';

Future<String?> getSupportedBiometric() async {
  final LocalAuthentication auth = LocalAuthentication();
  
  // 判断设备是否支持生物识别
  bool canUseBiometrics = await auth.canCheckBiometrics;
  if (!canUseBiometrics) return null;
  
  // 获取所有可用的生物识别类型
  List<BiometricType> availableTypes = await auth.getAvailableBiometrics();
  
  if (availableTypes.contains(BiometricType.face)) {
    return "面部识别";
  } else if (availableTypes.contains(BiometricType.fingerprint)) {
    return "指纹识别";
  }
  return null;
}
  1. Android权限配置:
    在android/app/src/main/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.USE_BIOMETRIC" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:16:12