Android 指纹识别demo

1、指纹工具类:

/**
 * 作者:created by meixi
 * 邮箱:[email protected]
 * 日期:2018/8/30 09
 */

public class FingerprintManagerUtil {
    private static FingerprintManagerCompat fingerprintManagerCompat;
    private static CancellationSignal cancellationSignal;

    private FingerprintManagerUtil() {
    }

    /**
     * 开始进行指纹验证
     *
     * @param context                    上下文
     * @param fingerprintListener 指纹验证回调接口
     */
    public static void startFingerprinterVerification(Context context, final FingerprintListener fingerprintListener) {
        fingerprintManagerCompat = FingerprintManagerCompat.from(context);

        // 是否支持指纹验证
        if (fingerprintManagerCompat == null || !fingerprintManagerCompat.isHardwareDetected()) {
            if (fingerprintListener != null)
                fingerprintListener.onNonsupport();
            return;
        }

        // 是否录入了指纹
        if (!fingerprintManagerCompat.hasEnrolledFingerprints()) {
            if (fingerprintListener != null)
                fingerprintListener.onEnrollFailed();
            return;
        }

        // 回调可以开始进行认证
        if (fingerprintListener != null)
            fingerprintListener.onAuthenticationStart();

        cancellationSignal = new CancellationSignal();
        fingerprintManagerCompat.authenticate(null, 0, cancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errMsgId, CharSequence errString) {
                // 验证出错回调,指纹传感器会关闭一段时间
                super.onAuthenticationError(errMsgId, errString);
                if (fingerprintListener != null)
                    fingerprintListener.onAuthenticationError(errMsgId, errString);
            }

            @Override
            public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                // 验证帮助回调
                super.onAuthenticationHelp(helpMsgId, helpString);
                if (fingerprintListener != null)
                    fingerprintListener.onAuthenticationHelp(helpMsgId, helpString);
            }

            @Override
            public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                // 验证成功
                super.onAuthenticationSucceeded(result);
                if (fingerprintListener != null)
                    fingerprintListener.onAuthenticationSucceeded(result);
            }

            @Override
            public void onAuthenticationFailed() {
                // 验证失败  指纹验证失败后,指纹传感器不会立即关闭指纹验证,
                // 系统会提供5次重试的机会,即调用5次onAuthenticationFailed()后,才会调用onAuthenticationError()
                super.onAuthenticationFailed();
                if (fingerprintListener != null)
                    fingerprintListener.onAuthenticationFailed();
            }
        }, null);
    }

    /**
     * 取消指纹验证
     */
    public static void cancel() {
        if (cancellationSignal != null && !cancellationSignal.isCanceled())
            cancellationSignal.cancel();
    }

    /**
     * 指纹验证回调监听
     */
    public interface FingerprintListener {
        /**
         * 手机或系统不支持指纹验证时回调
         */
        void onNonsupport();

        /**
         * 手机支持指纹验证,但是还没有录入指纹时回调
         */
        void onEnrollFailed();

        /**
         * 可以进行指纹验证时回调,该方法主要作用用于在进行指纹验证之前做一些操作,比如弹出对话框
         */
        void onAuthenticationStart();

        /**
         * 指纹验证成功时回调
         *
         * @param result {@link FingerprintManagerCompat.AuthenticationResult} 对象
         */
        void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result);

        /**
         * 验证失败时回调
         * <br/>&nbsp;&nbsp;&nbsp;&nbsp;
         * 指纹验证失败后,指纹传感器不会立即关闭指纹验证,系统会提供5次重试的机会,即调用
         * 5次 {@link #onAuthenticationFailed()} 后,才会调用 {@link #onAuthenticationError(int, CharSequence)}
         */
        void onAuthenticationFailed();

        /**
         * 验证出错时回调,指纹传感器会关闭一段时间,具体时间根据厂商不同有所区别
         *
         * @param errMsgId  错误信息id
         * @param errString 错误信息描述
         */
        void onAuthenticationError(int errMsgId, CharSequence errString);

        /**
         * 验证帮助回调
         *
         * @param helpMsgId  帮助信息id
         * @param helpString 帮助信息描述
         */
        void onAuthenticationHelp(int helpMsgId, CharSequence helpString);
    }

    /**
     * FingerprintListener 回调监听适配器,减少不必要方法的重写,只需要重写需要处理的对应方法即可
     */
    public abstract static class FingerprintListenerAdapter implements FingerprintListener {

        @Override
        public void onNonsupport() {
        }

        @Override
        public void onEnrollFailed() {
        }

        @Override
        public void onAuthenticationStart() {
        }

        @Override
        public void onAuthenticationFailed() {
        }

        @Override
        public void onAuthenticationError(int errMsgId, CharSequence errString) {
        }

        @Override
        public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
        }
    }
}

2、activity调用以及指纹识别验证回调方法(调用后,触摸手机指纹按钮即可实现指纹识别)

private AlertDialog alertDialog;
// 调用指纹验证方法
private void startVerification() {
    FingerprintManagerUtil.startFingerprinterVerification(this,
            new FingerprintManagerUtil.FingerprintListenerAdapter() {

                @Override
                public void onAuthenticationStart() {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
                            .setTitle("指纹验证")
                            .setMessage("指纹验证测试")
                            .setCancelable(false)
                            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    FingerprintManagerUtil.cancel();
                                }
                            });
                    alertDialog = builder.create();
                    alertDialog.show();
                }

                @Override
                public void onNonsupport() {
                    Log.i("MainActivity", "onNonsupport");
                    Toast.makeText(MainActivity.this, "不支持指纹验证", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onEnrollFailed() {
                    Log.i("MainActivity", "onEnrollFailed");
                    Toast.makeText(MainActivity.this, "没有录入指纹", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                    alertDialog.dismiss();
                    Log.i("MainActivity", "onAuthenticationSucceeded result = [" + result + "]");
                    Toast.makeText(MainActivity.this, "验证成功", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onAuthenticationFailed() {
                    Log.i("MainActivity", "onAuthenticationFailed");
                    Toast.makeText(MainActivity.this, "验证失败", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onAuthenticationError(int errMsgId, CharSequence errString) {
                    Log.i("MainActivity", "onAuthenticationError errMsgId = [" + errMsgId + "], errString = [" + errString + "]");
                    Toast.makeText(MainActivity.this, "提示: " + errString, Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                    Log.i("MainActivity", "onAuthenticationHelp helpMsgId = [" + helpMsgId + "], helpString = [" + helpString + "]");
                    Toast.makeText(MainActivity.this, "提示: " + helpString, Toast.LENGTH_SHORT).show();
                }
            });
}

需要指纹识别权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

猜你喜欢

转载自blog.csdn.net/meixi_android/article/details/82215816