zoukankan      html  css  js  c++  java
  • 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);
                }
            });
        }
  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/IT-lss/p/7878940.html
Copyright © 2011-2022 走看看