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);
}
}