• Android 指纹解锁


    util类:

    public class FingerprintUtil {
        public static CancellationSignal cancellationSignal;
    
        public static  void callFingerPrint(Context context, final OnCallBackListener listener){
            FingerprintManagerCompat managerCompat = FingerprintManagerCompat.from(context.getApplicationContext());
            if (!managerCompat.isHardwareDetected()){ //判断设备是否支持
                if (listener != null)
                    listener.onSupportFailed();
                return;
            }
            KeyguardManager keyguardManager =(KeyguardManager)context.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
            if (!keyguardManager.isKeyguardSecure()) {//判断设备是否处于安全保护中
                if (listener != null)
                    listener.onInsecurity();
                return;
            }
            if (!managerCompat.hasEnrolledFingerprints()){ //判断设备是否已经注册过指纹
                if (listener != null)
                    listener.onEnrollFailed(); //未注册
                return;
            }
            if (listener != null)
                listener.onAuthenticationStart(); //开始指纹识别
            cancellationSignal  = new CancellationSignal(); //必须重新实例化,否则cancel 过一次就不能再使用了
            managerCompat.authenticate(null,0,cancellationSignal,new FingerprintManagerCompat.AuthenticationCallback(){
                // 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息,比如华为的提示就是:尝试次数过多,请稍后再试。
                @Override
                public void onAuthenticationError(int errMsgId, CharSequence errString) {
                    if (listener != null)
                        listener.onAuthenticationError(errMsgId ,errString );
                }
    
                // 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作
                @Override
                public void onAuthenticationFailed() {
                    if (listener != null)
                        listener.onAuthenticationFailed();
                }
    
                @Override
                public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                    if (listener != null)
                        listener.onAuthenticationHelp(helpMsgId,helpString);
                }
    
                // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor
                @Override
                public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                    if (listener != null)
                        listener.onAuthenticationSucceeded(result);
                }
                ;
            },null);
    
        }
        public interface  OnCallBackListener{
            void onSupportFailed();
            void onInsecurity();
            void onEnrollFailed();
            void onAuthenticationStart();
            void onAuthenticationError(int errMsgId, CharSequence errString);
            void onAuthenticationFailed();
            void onAuthenticationHelp(int helpMsgId, CharSequence helpString);
            void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result);
        }
    
        public static void cancel(){
            if (cancellationSignal != null)
                cancellationSignal.cancel();
        }
    }

    使用util类:

    public void onFingerprintClick(){
            FingerprintUtil.callFingerPrint(getActivity(),new FingerprintUtil.OnCallBackListener() {
                AlertDialog dialog;
                @Override
                public void onSupportFailed() {
                    showToast("当前设备不支持指纹或者Android版本低于6.0");
                    showDialog();
                }
    
                @Override
                public void onInsecurity() {
                    showToast("当前设备未处于安全保护中");
                }
    
                @Override
                public void onEnrollFailed() {
                    showToast("请到设置中设置指纹");
                }
    
                @Override
                public void onAuthenticationStart() {
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_fingerprint,null);
                    initView(view);
                    builder.setView(view);
                    builder.setCancelable(false);
                    dialog = builder.create();
                    dialog.show();
                    final TextView tvPwd = (TextView) view.findViewById(R.id.tvPwd);
                    tvPwd.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            handler.removeMessages(0);
                            FingerprintUtil.cancel();
                            showDialog();
                        }
                    });
                    final TextView tvCancel = (TextView) view.findViewById(R.id.tvCancel);
                    tvCancel.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            handler.removeMessages(0);
                            FingerprintUtil.cancel();
                        }
                    });
                }
    
                @Override
                public void onAuthenticationError(int errMsgId, CharSequence errString) {
                    showToast(errString.toString());
                    if (dialog != null  &&dialog.isShowing()){
                        dialog.dismiss();
                        handler.removeMessages(0);
                    }
                }
    
                @Override
                public void onAuthenticationFailed() {
                    showToast("解锁失败");
                }
    
                @Override
                public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                    showToast(helpString.toString());
                }
    
                @Override
                public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                    showToast("解锁成功");
                    if (dialog != null  &&dialog.isShowing()){
                        dialog.dismiss();
                        handler.removeMessages(0);
                    }
                    if (isSafety){
                        code = 0;
                    }else {
                        code = 1;
                    }
                    setSafetyInfo(code);
                }
            });
        }
  • 相关阅读:
    oracle修改登录认证方式
    oracle设定用户密码使用时间
    oracle口令管理之允许某个用户最多尝试三次登录
    信息系统项目管理师考试大纲(组织整理)
    信息系统项目管理师考试大纲知识点汇总
    项目经理、系统架构师或技术骨干应该具备的知识
    【数据挖掘】数据挖掘工程师是做什么的?
    Java学习
    shuffle的过程分析
    Hadoop 原理总结
  • 原文地址:https://www.cnblogs.com/IT-lss/p/7878940.html
Copyright © 2020-2023  润新知