如何在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适配:
- 添加依赖到
pubspec.yaml:
dependencies: local_auth: ^2.1.6 # 可使用最新稳定版本
- 检测生物识别类型的代码:
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; }
- Android权限配置:
在android/app/src/main/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
内容的提问来源于stack exchange,提问作者DiChrist
相关产品推荐
相关产品推荐

