利用Android-FingerprintManager類實現指紋識別
阿新 • • 發佈:2018-12-10
安卓指紋識別
利用FingerprintManager主類進行指紋識別。
在安卓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類
三個主要方法
- authenticate(...) 啟動指紋識別
- hasEnrolledFingerprints() 判斷是否錄入有指紋
- 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)
但我們今天不站隊,而是從另外一個“詭異”視角,去審視一下什麼是生命,什麼是人工智慧
想象一下你獲得了一種能力——你的夢境是連續的,每天睡著之後,你都會來到一個與現實世界不同、但與前一天的夢境相同的環境中。