Android 指纹笔记

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

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容