利用Android-FingerprintManager類實現指紋識別


安卓指紋識別

利用FingerprintManager主類進行指紋識別。

Github項目地址

在安卓6.0中新增了API,FingerprintManager類,它是Google提供的幫助訪問指紋硬件的API類

新增API權限的過程如下

   ContextCompact.checkSelfPermission  // 檢查APP是否擁有某權限
   ActivityCompat.requestPermissions()  // 如果沒有就去申請
   onRequestPermissionResult()  //異步執行回調結果
   ActivityCompat.shouldShowRequestPermissionRationale // 用於給用戶解釋權限用途

AndroidManifest權限聲明

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

FingerprintManager類

三個主要方法

  1. authenticate(...) 啟動指紋識別
  2. hasEnrolledFingerprints() 判斷是否錄入有指紋
  3. isHardwareDetected() 判斷是否有硬件支持

實現要點

1 . 判斷是否硬件支持

    if (!mManager.isHardwareDetected()) {
       Toast.makeText(mContext, "沒有指紋識別模塊", Toast.LENGTH_SHORT).show();
       return false;
     }

2 . 檢查手機是否已錄入指紋

if (!mManager.hasEnrolledFingerprints()) {
    Toast.makeText(mContext, "沒有指紋錄入", Toast.LENGTH_SHORT).show();
    return false;
}

3 . 創建指紋開啟的回調方法

這里就該引入上面所說的FingerprintManager的三個內部類了

①FingerPrintManager.AuthenticationCallback:
在驗證時傳入該接口,通過該接口來返回驗證指紋的結果

②FingerPrintManager.AuthenticationResult:
當指紋驗證正確時,接口里返回的參數

③FingerPrintManager.CryptoObject:
由FingerPrintManager支持的封裝加密對象的類

只要指紋識別的結果,只需要AuthenticationCallback類即可。
這一步我們就創建AuthenticationCallback類對象。

FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errorCode, CharSequence errString) {
        //多次指紋密碼驗證錯誤后,進入此方法;並且,不可再驗(短時間)
        //errorCode是失敗的次數
        ToastUtils.show(mContext, "嘗試次數過多,請稍后重試", 3000);
    }

    @Override
    public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
        //指紋驗證失敗,可再驗,可能手指過臟,或者移動過快等原因。
    }

    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        //指紋密碼驗證成功
    }

    @Override
    public void onAuthenticationFailed() {
        //指紋驗證失敗,指紋識別失敗,可再驗,錯誤原因為:該指紋不是系統錄入的指紋。
    }
};

4 . 開啟指紋識別

只需要傳參即可。

mManager.authenticate(null, mCancellationSignal, 0, mSelfCancelled, null);

擴展小貓糧:

一. authenticate參數說明

/**
 * 參數說明:
 * FingerprintManager.CryptoObject - 用於通過指紋驗證取出AndroidKeyStore中的key的對象,用於加密
 * CancellationSignal - 用來取消指紋驗證,如果想手動關閉驗證,可以調用該參數的cancel方法
 * int - 沒什么意義,就是傳0就好了
 * FingerprintManager.AuthenticationCallback -  最重要,由於指紋信息是存在系統硬件中的,app是不可以訪問指紋信息的,所以每次驗證的時候,系統會通過這個callback告訴你是否驗證通過、驗證失敗等
 * Handler - FingerPrint中的消息都通過這個Handler來傳遞消息,如果你傳空,則默認創建一個在主線程上的Handler來傳遞消息,沒什么用,傳null好了
 */
public void authenticate(FingerprintManager.CryptoObject crypto, CancellationSignal cancel, int flags, FingerprintManager.AuthenticationCallback callback, Handler handler)

二. 什么是生命?什么是人工智能?

但我們今天不站隊,而是從另外一個“詭異”視角,去審視一下什么是生命,什么是人工智能

三. 雙重空間,夢境==現實?

想象一下你獲得了一種能力——你的夢境是連續的,每天睡着之后,你都會來到一個與現實世界不同、但與前一天的夢境相同的環境中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM