Android-中控指纹仪Live R20 开发注意事项
一.所需设备
- 1.一台支持USB接口的Android设备,某宝上面有的。例如:
(这个屏幕大约32寸,操作系统是Android 5.1,支持触摸,支持USB接口,两个USB接口,支持插网线,支持打王者荣耀,吃鸡等~)
这个超级重的倒是真的,只能挂墙上打。 - 2.一个或者两个指纹仪,这个指纹仪型号是Live R20的例如:
附带USB接头。
二.所需JAR包
1.导入架包
架包怎么导入自己的Android工程项目里面我就不说了。
2.架包大致核心类
最主要的就是指纹仪管理类,事件监听类,以及指纹算法库了
三.使用方式以及注意事项
1.注意事项
1.指纹仪插入设备时候,如果要默认打开自己写的指纹仪软件,请在AndroidManifest.xml的主入口加上相关intent-filter配置。
例如:2 XML重的 @xml/device_filter 为:
)3 所保存的指纹数据在APP关闭的时候,会全部丢失!需要自己做本地数据库的缓存,需要保存 byte[]数据。
1.使用方式
- 1.初始化
初始化指纹仪,设置VID和PID
LogHelper.setLevel(Log.WARN);
Map<String, Object> fingerprintParams = new HashMap<>();
//设置VID
fingerprintParams.put(ParameterHelper.PARAM_KEY_VID, VID);
//设置PID
fingerprintParams.put(ParameterHelper.PARAM_KEY_PID, PID);
fingerprintSensor = FingprintFactory.createFingerprintSensor(this, TransportType.USB, fingerprintParams); -
2.定义采集回调事件
构造方法:
private FingerprintCaptureListener FingerListener1, FingerListener2;
FingerListener1 = new FingerprintCaptureListener() {
@Override
public void captureOK(final byte[] fpImage) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//任何处理只能在UI线程中进行
}
});
}
@Override
public void captureError(FingerprintException e){
}
@Override
public void extractOK(byte[] fpTemplate) {
//指纹模板采集成功 一般在这里进行算法处理
}
@Override
public void extractError(final int i) {
}
}; - 3 开启采集 绑定到指纹仪的管理
try {
//打开指纹仪1
fingerprintSensor.open(0);
//设置监听 将监听绑定到指纹1上面 先绑定监听 在启动异步采集
fingerprintSensor.setFingerprintCaptureListener(0, FingerListener1);
//启动采集
fingerprintSensor.startCapture(0);
} catch (FingerprintException f) {
f.fillInStackTrace();
ToastUtil.showToast("指纹仪1,启动异常!");
} 4 停止采集和释放资源
fingerprintSensor.stopCapture(0);//1.先停止采集
fingerprintSensor.close(0);//2.关闭指纹仪
fingerprintSensor.destroy(); //3.释放相关资源
四.API 接口相关
1.FingerprintSensor 指纹仪管理类API
- 1.连接设备:public void open(int index)
- 2.关闭设备:public void close(int index)
- 3.事件关联设备: ublic void setFingerprintCaptureListener(int index,
FingerprintCaptureListener listener) - 4.销毁资源:public static void destroy(FingerprintSensor fingerprintSensor)
- 5.获取指纹图像宽:public static int getImageWidth()
- 6.获取指纹图像高:public static int getImageHeight()
- 7.获取指纹模板数据长度:public static int getLastTempLen ()
- 8.设置防假开关(仅支持SILK20R):public static void setFakeFunOn(int fakeFunOn)
- 9.获取当前指纹状态:public static int getFakeStatus()
2.FingerprintCaptureListener 事件监听类API
- 1.采集图像成功:void captureOK( byte[] fpImage
- 2.采集图像失败:void captureError(FingerprintSensorException e)
- 3.采集模板成功:void ex tractOK( byte[] fpTemplate );
- 4.提取模板失败:void extractError(int errno)
3.ZKFingerService 指纹算法处理类类API
- 1.比对两枚指纹模板:static public int verify(byte[] temp1, byte[] temp2)
- 2.将指纹模板与缓存中指定id的指纹模板进行匹配(即1:1比对),返回匹
配分数。:static public int verifyId( byte[] temp, String id) - 3.将指纹模板数据与缓存中的指纹模板数据进行匹配(即1:N比对):static public int identify(byte[] temp, byte []idstr, int threshold, int count)
- 4.合并 3 个指纹模板为登记模板:static public int merge(byte[] temp1, byte[] temp2, byte[] temp3, byte[]
temp) - 5.将指纹模板数据保存到缓存。用户将自己数据库中需要用到的指纹数
据,通过调用save方法保存到缓存中:static public save ( byte[] temp, String id ) - 6.获取缓存中指定 id 的指纹模板数据:static public int get ( byte[] temp, String id )
- 7.从内存中删除登记的指纹模板:static public int del(String id)
- 8.清空缓存中的所有指纹数据:static public int clear ()
- 9.获取缓存中当前存储的指纹模板数:static public int count()
4.FingerprintStatusCode错误类对照表
-20001 打开设备失败
-20002 关闭设备失败
-20003 获取 GPIO 失败
-20004 设置 GPIO 失败
-20005 读 EEPROM 失败
-20006 从 USB 获取图像失败
-20007 探测 USB 图像失败
-20008 输入缓存不够
-20009 读取数据异常
-20010 采集指纹失败
-20011 解密图像数据失败
-20012 启动采集线程失败
-20013 停止采集线程失败
-20014 初始化指纹设备失败
-20015 设置校正参数失败
ERR_NOT_FOUND -5000 没有找到制定 id 指纹模板
ERR_PARAM -5002 参数错误
ERR_TEMPLATE -5003 指纹模板错误
ERR_METHOD -5004 方法错误
五.总 结
其实这里面还是有很多坑的,开始明明登记好的指纹,结果返回到另外一个页面,指纹就没了,指纹仪拔出来,然后指纹又没了,APP重启一下,登记的指纹也没有了,莫名奇妙。
后来发现是需要自己做缓存的,每一次启动,都要进行注册一下,不然就无法进行指纹认证,不过这个的指纹匹配度和灵敏度还是蛮高的,识别率也很高。
踩坑的过程还是蛮有趣的,然后自己又把坑填上,然后再解决,十分有意思。