1. 程式人生 > >Android-指紋識別技術(含原始碼)

Android-指紋識別技術(含原始碼)

今天介紹新增指紋識別技術的幾個步驟;;

1.首先新增許可權

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

2.設計你的開鎖介面,由於不是正式專案,我就撈一次偷笑


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次。其他機型有興趣可以自行測試大笑

下面是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跑馬燈效果連結

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