Flutter指纹识别插件secugenfplib的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter指纹识别插件secugenfplib的使用

一个允许您使用原生Secugen FDx Pro SDK来通过Secugen外部USB设备捕获和验证指纹的插件。

平台支持

Android

当前支持的功能

  • 初始化USB指纹设备
  • LED控制(开/关)
  • 智能捕捉控制(启用/禁用)
  • 亮度控制(仅当智能捕捉被禁用时)
  • 捕获指纹
  • 带有超时质量的指纹捕捉
  • 自动捕捉指纹
  • 指纹验证
  • 指纹匹配分数

如何使用

您可以使用以下方式导入该包:

import 'package:secugenfplib/secugenfplib.dart';

插件初始化

final _secugenfplib = Secugenfplib();

初始化设备

在使用之前,必须先初始化Secugen USB设备。初始化时,USB设备必须通过USB连接到Android设备。android.permission.USB_PERMISSION USB权限将在设备初始化期间请求以访问USB设备。如果设备不受支持或传感器未找到等情况,可能会抛出自定义的SgfplibException异常。

try {
  bool? isDeviceReady = await _secugenfplib.initializeDevice();
} on SgfplibException catch (e) {
  // 处理异常
}

LED控制

enableLed()函数用于控制USB设备的LED灯。它接受一个布尔值true/false作为参数来开启或关闭LED灯。

_secugenfplib.enableLed(bool val);

智能捕捉

Secugen设备驱动程序使用智能捕捉技术来动态调整亮度以确保最佳图像质量。智能捕捉在设备初始化时默认启用。要手动启用或禁用智能捕捉,可以使用带有布尔类型参数的enableSmartCapture()函数。

_secugenfplib.enableSmartCapture(bool val);

亮度控制

为了手动控制捕获图像的质量,应该通过使用setBrightness()函数更改亮度设置来调整图像亮度。如果启用了智能捕捉,此函数将被忽略。如果启用了智能捕捉或亮度级别值不在0到100之间,则可能抛出SgfplibException异常。

try {
  await _secugenfplib.setBrightness(int brightnessLevel); // 设置从0到100
} on SgfplibException catch (e) {
  // 处理异常
}

捕捉指纹

captureFingerprint()函数用于捕捉指纹图像。它不检查图像质量就进行捕捉。

try {
  final captureResult = await _secugenfplib.captureFingerprint();
} on SgfplibException catch (e) {
  // 处理异常
}

captureFingerprintWithQuality()函数会连续捕捉指纹图像一段时间,检查图像质量是否符合指定的质量值,并忽略质量不合格的指纹图像。timeout参数接受一个整数值,表示毫秒数。

try {
  final captureResult = await _secugenfplib.captureFingerprintWithQuality(timeout: TIMEOUT_IN_MS, quality: QUALITY);
} on SgfplibException catch (e) {
  // 处理异常
}

captureFingerprint()captureFingerprintWithQuality()函数都返回一个类型为ImageCaptureResult的对象。ImageCaptureResult有三个属性:rawBytes(原始指纹字节)、imageBytes(可表示图像的字节)和quality(图像质量)。如果未检测到指纹,则可能抛出SgfplibException异常。

自动捕捉

captureFingerprint()captureFingerprintWithQuality()函数都支持自动捕捉。如果开启了自动捕捉功能,连接的指纹设备会持续检查手指的存在。如果检测到任何指纹,则返回一张图像。

final captureResult = await _secugenfplib.captureFingerprint(auto: bool isAutoOn);
final captureResult = await _secugenfplib.captureFingerprintWithQuality(timeout: TIMEOUT_IN_MS, quality: QUALITY, auto: bool isAutoOn);

指纹验证

verifyFingerprint()函数使用两个不同指纹的ImageCaptureResult的原始字节进行验证。它为每个指纹字节创建一个模板,并使用这些模板进行匹配。

try {
  bool? isMatch = await _secugenfplib.verifyFingerprint(firstBytes: FIRST_RAW_BYTES, secondBytes: SECOND_RAW_BYTES);
} on SgfplibException catch (e) {
  // 处理异常
}

指纹匹配分数

为了手动确定两个指纹的匹配情况,可以使用匹配分数。getMatchingScore()函数返回比较两个ImageCaptureResult的原始指纹字节的得分。得分可以在0到200之间。得分越高,匹配准确性越高。

try {
  int? score = await _secugenfplib.getMatchingScore(firstBytes: FIRST_RAW_BYTES, secondBytes: SECOND_RAW_BYTES);
} on SgfplibException catch (e) {
  // 处理异常
}

示例应用

额外配置

如果您希望您的应用程序在USB设备连接时自动打开,您需要在您的Android manifest中添加以下配置。如果授予了USB权限,这种配置可以使您的应用程序在USB设备连接到Android设备后立即打开。

<activity></activity> 标签内添加:

<intent-filter>
    <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
    android:resource="@xml/device_filter" />

接下来,在 app >> src >> main >> res >> xml 目录下,添加一个名为 device_filter.xml 的XML文件。复制并粘贴以下XML代码到 device_filter.xml 文件中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--SecuGen SDU03P 0x1162 0x1000-->
    <usb-device vendor-id="4450" product-id="4096" />
    <!--SecuGen SDU04P  0x1162 0x2000-->
    <usb-device vendor-id="4450" product-id="8192" />
    <!--SecuGen U20  0x1162 0x2200-->
    <usb-device vendor-id="4450" product-id="8704" />
    <!--SecuGen U20-2  0x1162 0x22BA-->
    <usb-device vendor-id="4450" product-id="8890" />
    <!--SecuGen UPx  0x1162 0x2201-->
    <usb-device vendor-id="4450" product-id="8705" />
    <!--SecuGen U10  0x1162 0x2203-->
    <usb-device vendor-id="4450" product-id="8707" />
    <!--SecuGen U20-AP  0x1162 0x2220-->
    <usb-device vendor-id="4450" product-id="8736" />
    <!--SecuGen U20-A  0x1162 0x2240-->
    <usb-device vendor-id="4450" product-id="8768" />
    <!--SecuGen U20-AP-A  0x1162 0x2360-->
    <usb-device vendor-id="4450" product-id="9056" />
    <!--SecuGen U30-A  0x1162 0x2410-->
    <usb-device vendor-id="4450" product-id="9232" />
    <!--SecuGen U-AIR  0x1162 0x2500-->
    <usb-device vendor-id="4450" product-id="9472" />
</resources>

更多关于Flutter指纹识别插件secugenfplib的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter指纹识别插件secugenfplib的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用secugenfplib插件进行指纹识别的示例代码。请注意,secugenfplib可能是一个假设的插件名称,因为具体的指纹识别插件可能有所不同。不过,以下代码示例将展示一个典型的使用流程,假设存在一个类似的插件。

首先,你需要确保你的Flutter项目中已经添加了相应的指纹识别插件。在pubspec.yaml文件中添加依赖项(假设插件名称为secugenfplib,请根据实际情况替换):

dependencies:
  flutter:
    sdk: flutter
  secugenfplib: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤使用指纹识别功能:

  1. 导入插件
import 'package:secugenfplib/secugenfplib.dart';
  1. 初始化插件并请求指纹权限

在Flutter中,你可能需要在适当的位置(如应用的初始化过程中)初始化插件并请求必要的权限。以下是一个示例:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());

  // 初始化插件(假设插件提供了初始化方法)
  SecugenFpLib.instance.initialize().then((isInitialized) {
    if (isInitialized) {
      print("指纹识别插件初始化成功");
      // 请求指纹权限(假设插件提供了请求权限的方法)
      SecugenFpLib.instance.requestFingerprintPermission().then((isGranted) {
        if (isGranted) {
          print("指纹权限已授予");
        } else {
          print("指纹权限被拒绝");
        }
      });
    } else {
      print("指纹识别插件初始化失败");
    }
  });
}
  1. 进行指纹识别

在需要指纹识别的地方(例如,一个按钮点击事件处理程序中),调用插件提供的指纹识别方法。以下是一个示例:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String result = "";

  void _authenticateFingerprint() async {
    try {
      bool isAuthenticated = await SecugenFpLib.instance.authenticate();
      if (isAuthenticated) {
        setState(() {
          result = "指纹识别成功";
        });
      } else {
        setState(() {
          result = "指纹识别失败或取消";
        });
      }
    } catch (e) {
      setState(() {
        result = "发生错误: ${e.message}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('指纹识别示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              result,
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _authenticateFingerprint,
              child: Text('验证指纹'),
            ),
          ],
        ),
      ),
    );
  }
}

请注意,上述代码是一个简化的示例,用于展示如何在Flutter中使用一个假设的指纹识别插件。实际使用时,你需要根据具体插件的文档和API来调整代码。特别是插件的初始化、权限请求和指纹识别方法可能会有所不同。

另外,由于指纹识别通常涉及到硬件访问和敏感信息,因此在实际应用中,你需要确保遵循相关的安全和隐私最佳实践。

回到顶部