Android 指紋筆記 已經(jīng)躺在 草稿快一年了,還是整理一下展氓,把坑填上适掰。
FingerprintManagerCompat 是V4 包提供支持 API >=23
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
指紋的使用都是在驗證次绘,大部分是支付,也有些是在登錄刽酱,或者私密的二次驗證喳逛。
以自己寫的 私密記事本 鎖屏之后再亮屏需要指紋驗證的思路:
首先是大于23,使用官方支持的棵里,否則可能會出現(xiàn)異常润文,使用反射也能達到要求但是姐呐,不合乎規(guī)范:
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";
// 當出現(xiàn)錯誤的時候回調(diào)此函數(shù),比如多次嘗試都失敗了的時候典蝌,errString是錯誤信息
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
Log.d(TAG, "onAuthenticationError: " + errString);
if (errString != null)
loadingDialog.showError(errString.toString(),1);
}
// 當指紋驗證失敗的時候會回調(diào)此函數(shù)曙砂,失敗之后允許多次嘗試,失敗次數(shù)過多會停止響應(yīng)一段時間然后再停止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);
}
// 當驗證的指紋成功時會回調(diào)此函數(shù)骏掀,然后不再監(jiān)聽指紋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);
}
}