• Android开发 Android6.0指纹识别


    前言

      指纹识别功能在Android端已经被封装的十分简单,当然给予的功能也十分少你只能得到指纹是否识别成功或失败的回调。其实实际业务里你也没有需要很复杂的功能,这些基本满足了你确认当前设备是机主的密码锁功能。

    另外,你需要知道在此博客的指纹识别只适用于Android 6.0 - Android 9.0 。

    简单demo

      权限

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

      代码

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private static final String TAG = MainActivity.class.getSimpleName();
        private FingerprintManagerCompat mFingerprintManagerCompat;
        private CancellationSignal mCancellationSignal;
        private TextView mTextView;
        private Button mAuthenticateBtn;
        private Button mCandleBtn;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
            mFingerprintManagerCompat = FingerprintManagerCompat.from(this);//初始化指纹管理区
    
    
        }
    
        private void initView() {
            mAuthenticateBtn = (Button) findViewById(R.id.authenticate_btn);
            mCandleBtn = (Button) findViewById(R.id.candle_btn);
            mAuthenticateBtn.setOnClickListener(this);
            mCandleBtn.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.authenticate_btn:
                    if (mFingerprintManagerCompat.isHardwareDetected()) {
                        Log.e(TAG, "检测到指纹设备");
                        if (mFingerprintManagerCompat.hasEnrolledFingerprints()){
                            fingerprintAuthenticate();
                            Log.e(TAG, "有指纹");
                            return;
                        }
                    }
                    Toast.makeText(this, "此设备没有指纹", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.candle_btn:
                    if (mCancellationSignal != null){
                        mCancellationSignal.cancel();   //取消指纹认证请求
                    }
                    break;
            }
        }
    
        /**
         * 请求指纹认证
         */
        private void fingerprintAuthenticate() {
            //TODO 此处可以添加你的指纹认证提示对话框
            mCancellationSignal = new CancellationSignal(); //取消指纹认证操作类
            mCancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {
                @Override
                public void onCancel() {
                    //取消指纹认证回调
                }
            });
            /*
            下面这行代码就是认证请求操作,它一共有5个参数,这里说明下
            1. 与调用关联的对象;如果不需要,则为null。 不需要关注
            2.可选标志;应该是0 。 不需要关注
            3.可用于取消身份验证的对象的操作类
            4.回调接口
            5.接口回调线程Handler,默认主线程
             */
            mFingerprintManagerCompat.authenticate(null, 0, mCancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
                @Override
                public void onAuthenticationError(int errMsgId, CharSequence errString) {
                    super.onAuthenticationError(errMsgId, errString);
                    //遇到不可恢复的错误并且操作完成时调用。 *不会在此对象上进行进一步的回调
                    //另外主动取消认证后,也会在此处回调
                    Log.e(TAG, "onAuthenticationError: 认证错误");
                }
    
                @Override
                public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                    super.onAuthenticationHelp(helpMsgId, helpString);
                    //身份验证期间遇到可恢复的错误时调用。提供了帮助字符串,以向用户提供有关发生问题的指导,例如*“传感器脏污,请清洁它”
                    Log.e(TAG, "onAuthenticationHelp: 认证帮助");
                }
    
                @Override
                public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                    super.onAuthenticationSucceeded(result);
                    //成功识别指纹时调用
                    Log.e(TAG, "onAuthenticationSucceeded: 认证成功");
                }
    
                @Override
                public void onAuthenticationFailed() {
                    super.onAuthenticationFailed();
                    //当指纹有效但未被识别时调用
                    Log.e(TAG, "onAuthenticationFailed: 认证失败");
                }
            }, null);
    
        }
    }
  • 相关阅读:
    数据结构(树链剖分):NOI2014 购票
    数据结构(树链剖分):COGS 2109. [NOIP2015] 运输计划
    数据结构(树链剖分,堆):HNOI 2016 network
    快速傅里叶变换(FFT):COGS 2216. 你猜是不是KMP
    生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
    数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo
    数位DP:SPOJ KPSUM
    动态规划(状态压缩):BZOJ 2621 [Usaco2012 Mar]Cows in a Skyscraper
    数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说
    生成树的计数(基尔霍夫矩阵):UVAoj 10766 Organising the Organisation SPOJ HIGH
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/12341299.html
Copyright © 2020-2023  润新知