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

能否检测Flutter应用中用户是否启用或禁用生物识别功能?

检测设备生物识别功能的启用状态

可以检测用户是否开启了生物识别功能,但你提供的代码只能判断设备支持的生物识别类型,无法直接判断该功能是否被用户实际启用。

核心区别

getAvailableBiometrics()返回的是硬件层面支持的生物识别类型(比如指纹、面部识别),但不管用户有没有在系统里开启或录入生物识别信息,这个方法都会返回对应的类型。比如设备带指纹传感器,但用户没录指纹,该方法还是会返回BiometricType.fingerprint。

正确检测方法

要判断用户是否真的启用并录入了生物识别信息,得通过发起验证请求来判断。如果验证失败的原因是「未录入生物识别」或「功能未开启」,就能准确得出结论。

优化后的代码示例

import 'package:local_auth/local_auth.dart';
import 'package:app_settings/app_settings.dart';

Future<bool> isBiometricEnabled() async {
  final LocalAuthentication localAuthen = LocalAuthentication();
  
  // 先确认设备硬件是否支持生物识别
  bool hasBiometricHardware = await localAuthen.isDeviceSupported();
  if (!hasBiometricHardware) {
    return false;
  }

  try {
    // 尝试发起生物识别验证(无需验证成功,仅判断是否可触发)
    bool canAuthenticate = await localAuthen.authenticate(
      localizedReason: '请验证生物识别',
      options: const AuthenticationOptions(
        useErrorDialogs: false, // 关闭系统默认错误弹窗,自行处理
        stickyAuth: false,
      ),
    );
    return canAuthenticate;
  } on Exception catch (e) {
    // 捕获未录入生物识别的错误
    if (e.toString().contains('NOT_ENROLLED')) {
      // 用户没录入任何生物识别信息,引导去设置页
      AppSettings.openAppSettings();
      return false;
    } else if (e.toString().contains('SENSOR_LOCKOUT')) {
      // 生物识别传感器被暂时锁定
      return false;
    }
    // 其他未知错误
    return false;
  }
}

关键说明

  • isDeviceSupported():先排除硬件不支持生物识别的情况
  • 关闭useErrorDialogs:避免系统自动弹出错误提示,让我们可以自定义处理逻辑
  • 异常判断:通过捕获特定错误类型,精准判断用户是否未启用/未录入生物识别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:15:10