天天看點

Android-指紋識别技術(含源碼)

今天介紹添加指紋識别技術的幾個步驟;;

1.首先添權重限

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>      

2.設計你的開鎖界面,由于不是正式項目,我就撈一次
Android-指紋識别技術(含源碼)

Android-指紋識别技術(含源碼)

3.擷取移動裝置指紋管理器

FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this);      

4.判斷移動裝置是否支援指紋解鎖

fingerprint.isHardwareDetected();      

這裡傳回的一個boolean值,true:支援  false:不支援

5.判斷移動裝置是否儲存過指紋

fingerprint.hasEnrolledFingerprints();      

同樣這裡傳回的也是一個boolean值,  true:儲存過  false:沒儲存過

6.開始驗證指紋

fingerprint.authenticate(crypto, flags,cancel,callback,handler)      
這裡解釋一下參數的意思

crypto:可以傳null,想要了解的話,可以自行去檢視源碼

flags:傳0

cancel:new   cancellationsignal();

callback:是驗證結果和驗證狀态的回調     ↓  貼上代碼,注釋很詳細,就不解釋了;

callback = new FingerprintManagerCompat.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        super.onAuthenticationError(errMsgId, errString);
        //驗證錯誤時,回調該方法。當連續驗證5次錯誤時,将會走onAuthenticationFailed()方法
        hander.obtainMessage(1, errMsgId, 0).sendToTarget();
    }

    @Override
    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
        super.onAuthenticationSucceeded(result);
        //驗證成功時,回調該方法。fingerprint對象不能再驗證
        hander.obtainMessage(2).sendToTarget();
    }

    @Override
    public void onAuthenticationFailed() {
        super.onAuthenticationFailed();
        //驗證失敗時,回調該方法。fingerprint對象不能再驗證并且需要等待一段時間才能重新建立指紋管理對象進行驗證
        hander.obtainMessage(3).sendToTarget();
    }
};      

handler:根據回調傳回的狀态,做出相應的UI更新      ↓   貼上代碼,我這裡成功的話直接跳到詳情界面    

msg.what傳回“1”的話,還會有很多種狀态,下面會介紹

hander = new Handler(getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 1:   //驗證錯誤
                //todo 界面處理
                handleErrorCode(msg.arg1);
                Log.e(tag, "驗證錯誤");
                break;
            case 2:   //驗證成功
                //todo 界面處理
                Log.e(tag, "驗證成功");
                Toast.makeText(MainActivity.this, "驗證成功", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(MainActivity.this, Bactivity.class));
                break;
            case 3:    //驗證失敗
                //todo 界面處理
                Log.e(tag, "驗證失敗");
                Toast.makeText(MainActivity.this, "驗證失敗···", Toast.LENGTH_SHORT).show();
                break;
        }


    }
};      
這裡解釋一下驗證錯誤跟驗證失敗的差別:

驗證錯誤:  一切理想狀态下(前置條件都通過的話)開始驗證指紋,但是不是移動裝置本身儲存過的指紋。

驗證失敗:一切理想狀态下(前置條件都通過的話)開始驗證指紋,每次都不是移動裝置本身儲存過的指紋,并且次數比較多msg.what才會傳回“3”; 小米預設為5次,vivo預設5次。其他機型有興趣可以自行測試

Android-指紋識别技術(含源碼)
下面是handleerrorcode方法,注釋很清楚。
private void handleErrorCode(int code) {
    switch (code) {
        case FingerprintManager.FINGERPRINT_ERROR_CANCELED:
            //todo 指紋傳感器不可用,該操作被取消
            Toast.makeText(this, "驗證錯誤···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE:
            //todo 目前裝置不可用,請稍後再試
            Toast.makeText(this, "驗證錯誤···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:
            //todo 由于太多次嘗試失敗導緻被鎖,該操作被取消
            Toast.makeText(this, "由于太多次嘗試失敗導緻被鎖,該操作被取消···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_NO_SPACE:
            //todo 沒有足夠的存儲空間儲存這次操作,該操作不能完成
            Toast.makeText(this, "沒有足夠的存儲空間儲存這次操作,該操作不能完成···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
            //todo 操作時間太長,一般為30秒
            Toast.makeText(this, "驗證錯誤···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS:
            //todo 傳感器不能處理目前指紋圖檔
            Toast.makeText(this, "驗證錯誤···", Toast.LENGTH_SHORT).show();
            break;
    }
}      

7.詳情界面用了個類似于跑馬燈效果的字型有興趣的話可以飛一下   Android跑馬燈效果連結

Android-指紋識别技術(含源碼)

然後最後貼上源碼希望對大家有所幫助  點選打開連結

繼續閱讀