Android 指紋筆記 已經躺在 草稿快一年了,還是整理一下,把坑填上。
FingerprintManagerCompat 是V4 包提供支持 API >=23
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
指紋的使用都是在驗證,大部分是支付,也有些是在登錄,或者私密的二次驗證。
以自己寫的 私密記事本 鎖屏之后再亮屏需要指紋驗證的思路:
首先是大于23,使用官方支持的,否則可能會出現異常,使用反射也能達到要求但是,不合乎規范:
private FingerprintManagerCompat manager;
oncreat
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 獲取一個FingerPrintManagerCompat的實例
manager = FingerprintManagerCompat.from(this);
}
callback
public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback {
private static final String TAG = "MyCallBack";
// 當出現錯誤的時候回調此函數,比如多次嘗試都失敗了的時候,errString是錯誤信息
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
Log.d(TAG, "onAuthenticationError: " + errString);
if (errString != null)
loadingDialog.showError(errString.toString(),1);
}
// 當指紋驗證失敗的時候會回調此函數,失敗之后允許多次嘗試,失敗次數過多會停止響應一段時間然后再停止sensor的工作
@Override
public void onAuthenticationFailed() {
Log.d(TAG, "onAuthenticationFailed: " + "驗證失敗");
// handler.sendMessageDelayed(new Message(), 1000 * 30);
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mycall != null)
manager.authenticate(null, 0, null, mycall, null);
}
}, 1000 * 30);
loadingDialog.showError("驗證失敗",1);
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
Log.d(TAG, "onAuthenticationHelp: " + helpString);
if (helpString != null)
loadingDialog.showError("驗證失敗",1);
}
// 當驗證的指紋成功時會回調此函數,然后不再監聽指紋sensor
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult
result) {
Log.d(TAG, "onAuthenticationSucceeded: " + "驗證成功");
loadingDialog.show("驗證成功", 1);
if (AppContext.getContext().isLocked) {
AppContext.getContext().isLocked = false;
AppContext.getContext().removeActivity(VolidateActivity.this);
VolidateActivity.this.finish();
} else DeviceUtil.startActivity(context, MainActivity.class);
}
}