如何在Android应用中接入Secugen Hamster 20 Pro并采集指纹图像
集成Secugen Hamster 20 Pro到Android应用实现指纹扫描指南
一、设备接入准备
- 硬件连接:Secugen Hamster 20 Pro为USB接口设备,需使用USB OTG线将其连接至支持OTG功能的Android设备(手机/平板)。
- 权限配置:在
AndroidManifest.xml中添加以下声明:<!-- 声明USB Host功能支持 --> <uses-feature android:name="android.hardware.usb.host" /> <!-- 申请USB设备访问权限 --> <uses-permission android:name="android.permission.USB_PERMISSION" />
二、SDK集成
- 获取Secugen官方提供的Android SDK,将SDK中的jar包放入项目
libs目录,在模块级build.gradle中添加依赖:implementation files('libs/secugen-sdk.jar') - 配置USB设备过滤:在
res/xml目录下创建device_filter.xml文件,添加设备的VID和PID(Secugen Hamster 20 Pro的VID为1204,PID为223):<?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="1204" product-id="223" /> </resources> - 在
AndroidManifest.xml的目标Activity中添加USB设备连接的意图过滤器:<activity android:name=".FingerprintScanActivity"> <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" /> </activity>
三、指纹图像采集实现
1. 申请USB设备权限
在Activity中获取USB管理器,枚举设备并请求访问权限:
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList(); UsbDevice secugenDevice = null; // 遍历设备列表找到Secugen Hamster 20 Pro for (UsbDevice device : deviceList.values()) { if (device.getVendorId() == 1204 && device.getProductId() == 223) { secugenDevice = device; break; } } if (secugenDevice != null) { PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.your.package.USB_PERMISSION"), PendingIntent.FLAG_IMMUTABLE); usbManager.requestPermission(secugenDevice, permissionIntent); }
2. 监听权限请求结果
注册广播接收器处理权限申请结果,获取权限后初始化扫描器:
private final BroadcastReceiver usbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if ("com.your.package.USB_PERMISSION".equals(action)) { synchronized (this) { UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { initFingerprintScanner(); } } } } } }; // 在Activity的onCreate中注册广播接收器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter("com.your.package.USB_PERMISSION"); registerReceiver(usbReceiver, filter); }
3. 初始化扫描器并采集指纹
使用Secugen SDK提供的API完成指纹采集:
private void initFingerprintScanner() { SGFPLib sgfplib = new SGFPLib(); try { // 自动识别并初始化设备 int initResult = sgfplib.Init(SGFPLib.SGFP_DEV_AUTO); if (initResult == SGFPLib.SGFP_ERROR_NONE) { // 设置指纹图像分辨率为500DPI(符合标准要求) sgfplib.SetParameter(SGFPLib.SGFP_PARAM_IMAGE_RESOLUTION, SGFPLib.SGFP_RESOLUTION_500DPI); // 分配图像缓冲区 int imageSize = sgfplib.GetImageSize(); byte[] imageBuffer = new byte[imageSize]; // 开始采集指纹 int captureResult = sgfplib.Capture(imageBuffer, SGFPLib.SGFP_FINGER_UNKNOWN); if (captureResult == SGFPLib.SGFP_ERROR_NONE) { // 将字节数组转换为Bitmap用于显示或后续处理 Bitmap fingerprintBitmap = BitmapFactory.decodeByteArray(imageBuffer, 0, imageSize); // 这里可以添加图像显示、保存或上传逻辑 } else { // 采集失败,根据错误码处理(如提示用户重新按压指纹) } } else { // 设备初始化失败,检查连接或兼容性 } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 sgfplib.Close(); } }
四、注意事项
- 确保测试设备支持USB OTG功能,部分老旧Android设备可能存在兼容性问题。
- 严格参照Secugen SDK官方文档调用API,不同版本的SDK方法参数可能存在差异。
- 处理异常场景:设备断开连接、采集超时、权限被拒绝等。
- 指纹图像的存储与传输需加密处理,符合隐私合规要求。
内容的提问来源于stack exchange,提问作者Sanket Khadke
相关产品推荐
相关产品推荐

