安卓指紋識別
利用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類
三個主要方法
- 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)
二. 什么是生命?什么是人工智能?
但我們今天不站隊,而是從另外一個“詭異”視角,去審視一下什么是生命,什么是人工智能
三. 雙重空間,夢境==現實?
想象一下你獲得了一種能力——你的夢境是連續的,每天睡着之后,你都會來到一個與現實世界不同、但與前一天的夢境相同的環境中。