美文网首页开源项目登录Android Demo_Bamboy
Bamboy简单实现 Android M 指纹识别(附源码)

Bamboy简单实现 Android M 指纹识别(附源码)

作者: 尘少少少 | 来源:发表于2017-05-25 15:39 被阅读159次

    众所周知,
    Android阵营里的指纹兼容真可谓是一团糟,
    每个厂家几乎都有一套自己的API,
    直到Android M的出现,
    才慢慢地走上正途。

    那么今天我们就一起来探讨一下,
    Android M里指纹API的使用。

    想要实现其实还是很简单的,
    第一步,
    AndroidManifest.xml里加权限:

    <!--指纹权限-->
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    

    第二步,
    准备工作,
    需要的主要有一个工具类和两个方法:
    工具类代码很简单,如下:

    public class FingerUtil {
        private CancellationSignal signal;
        private FingerprintManagerCompat fingerprintManager;
    
        public FingerUtil(Activity activity) {
            signal = new CancellationSignal();
            fingerprintManager = FingerprintManagerCompat.from(activity);
        }
    
        public void startFingerListen(FingerprintManagerCompat.AuthenticationCallback callback) {
            fingerprintManager.authenticate(null, 0, signal, callback, null);
        }
    
        public void stopsFingerListen() {
            signal.cancel();
            signal = null;
        }
    }
    

    然后就是两个方法,
    第一个方法:
    检测当前设备是否有指纹模块:

    /**
    * 检测是否有指纹模块
    *
    * @return 是否有指纹模块
    */
    private boolean checkFingerModule() {
        try {
            FingerprintManager fingerManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
            return fingerManager.isHardwareDetected();
        } catch (Exception e) {
            return false;
        }
    }
    

    第二个方法:
    初始化指纹模块:

    // 实例化指纹监听
    mFingerListen = new FingerprintManagerCompat.AuthenticationCallback() {
    
        /**
        * 指纹识别成功
        */
        @Override
        public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
            tv_log.setText("指纹识别成功");
        }
    
        /**
        * 识别失败
        */
        @Override
        public void onAuthenticationFailed() {
            tv_log.setText("指纹识别失败");
        }
    
        /**
        * Msg监听
        * @param helpMsgId Msg码
        * @param helpString Msg文案
        */
        @Override
        public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
            if (tv_log.getTag() != null && false == (Boolean) tv_log.getTag()) {
                return;
            }
            switch (helpMsgId) {
                case 1001:      // 等待按下手指
                    tv_log.setText("请按下手指");
                    break;
                case 1002:      // 手指按下
                    tv_log.setText("正在识别…");
                    break;
                case 1003:      // 手指抬起
                    tv_log.setText("手指抬起,请重新按下");
                    break;
            }
        }
    
        /**
        * 多次指纹密码验证错误后,进入此方法;并且,不能短时间内调用指纹验证
        * @param errMsgId 错误码
        * @param errString 剩余禁用时间
        */
        @Override
        public void onAuthenticationError(int errMsgId, CharSequence errString) {
            switch (errMsgId) {
                case 5:      // 可以进行识别
                    tv_log.setTag(true);
                    break;
                case 7:      // 失败次数过多,禁用倒计时未结束
                    tv_log.setText("失败次数过多!请" + errString + "秒后再试");
                    break;
                }
            }
        };
        // 实例化工具类
        mFingerUtil = new FingerUtil(this);
        // 使用指纹监听监听
        mFingerUtil.startFingerListen(mFingerListen);
    }
    

    准备工作完成,
    剩下的就简单咯。

    第三步——使用:
    这一步就特别简单了:

    try {
        // 初始化指纹按钮点击事件
        initFingerBtnClick();
    } catch (Exception e) {
        tv_log.setText("当前设备没有指纹识别模块\n或未遵循 Android M 指纹API规范");
    }
    

    到这里基本就完成了,
    但是有一点需要注意,
    onStop()的时候一定要把指纹关闭,
    以免一直占用指纹模块:

    @Override
    protected void onStart() {
        super.onStart();
        if (mFingerUtil != null && mFingerListen != null) {
            mFingerUtil.startFingerListen(mFingerListen);
        }
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        if (mFingerUtil != null) {
            mFingerUtil.stopsFingerListen();
        }
    }
    

    尘少老规矩,附源码:
    http://download.csdn.net/download/bamboy_/9782241

    如果觉得尘少的Demo还不错的话,
    可以克隆我的Git仓库,
    各种酷炫效果收入囊中:
    https://github.com/Bamboy120315/bamboy.git

    手机扫码下载App一睹为快:


    手机浏览器扫码直接下载安装

    相关文章

      网友评论

        本文标题:Bamboy简单实现 Android M 指纹识别(附源码)

        本文链接:https://www.haomeiwen.com/subject/fqlzxxtx.html