參考别人的總結,簡單的實作了指紋識别的功能,下面做個小小的總結
簡單效果圖

指紋識别的必要條件:僅支援API23及以上的系統,裝置必須帶有指紋識别功能
簡單的業務邏輯:
1 判斷裝置的API是否大于22
得到系統的API
minSdkVersion= Build.VERSION.SDK;
2 添加指紋識别權限
<uses-permission android:name="android.permission.USE_FINGERPRINT"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
3 判斷裝置是否支援指紋識别
在開始判斷之前需要先通過V4包獲得對象
manager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
keyManager= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
判斷
//硬體裝置是否支援指紋解鎖功能
if (!manager.isHardwareDetected()) {
Toast.makeText(getBaseContext(), "該手機不支援指紋解鎖", Toast.LENGTH_SHORT).show();
return false;
}
4 判斷裝置是否設定了鎖屏密碼
//判斷是否有鎖屏密碼
if(!keyManager.isKeyguardSecure()){
Toast.makeText(getBaseContext(), "請設定鎖屏密碼", Toast.LENGTH_SHORT).show();
return false;
}
5 判斷裝置是否錄入指紋,貌似APP無法直接喚醒指紋設定頁面
<pre name="code" class="java"> //判斷是否錄入指紋
if (!manager.hasEnrolledFingerprints()) {
Toast.makeText(getBaseContext(), "沒有錄入指紋", Toast.LENGTH_SHORT).show();
return false;
}
6 滿足以上條件開始識别指紋
參數分别是:防止第三方惡意攻擊的包裝類,CancellationSignal對象,flags,回調對象,handle
manager.authenticate(cryptoObject, signal, 0, callBack, null);
7 在回調函數裡做識别後邏輯處理
回調函數的常用方法
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
Toast.makeText(getBaseContext(), "操作過于頻繁,請稍後再試",Toast.LENGTH_SHORT).show();
}
@Override
public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
super.onAuthenticationHelp(helpCode, helpString);
}
//指紋識别成功
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
Toast.makeText(getBaseContext(), "指紋識别成功",Toast.LENGTH_SHORT).show();
image.setImageResource(R.mipmap.yes);
}
//指紋識别失敗
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
Toast.makeText(getBaseContext(), "指紋識别失敗", Toast.LENGTH_SHORT).show();
i++;
if(i==3){
Toast.makeText(getBaseContext(), "失敗次數過多,請輸入鎖屏密碼", Toast.LENGTH_SHORT).show();
showLockScreenPass();
i=0;
}
}
};
8 如果識别失敗次數過多,則轉入輸入解鎖密碼界面
/**
*指紋識别錯誤次數過多,顯示手機鎖屏密碼
*/
private void showLockScreenPass() {
Intent intent=keyManager.createConfirmDeviceCredentialIntent("finger","開啟鎖屏密碼");
if(intent!=null){
startActivityForResult(intent, REQUST_CODE);
}
}
技術欠佳,有問題歡迎指出哦!
源碼下載下傳位址:
http://download.csdn.net/detail/huiling815/9624163