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 為:
<?xml version="1.0" encoding="utf-8"?>
)
- 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重新開機一下,登記的指紋也沒有了,莫名奇妙。
後來發現是需要自己做緩存的,每一次啟動,都要進行注冊一下,不然就無法進行指紋認證,不過這個的指紋比對度和靈敏度還是蠻高的,識别率也很高。
踩坑的過程還是蠻有趣的,然後自己又把坑填上,然後再解決,十分有意思。
轉載于:https://www.cnblogs.com/jiangtuanyuan/p/9750543.html