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

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

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

上效果:
Bamboy指纹识别

由于录屏只能录到屏幕,
看不到两次用的分别是哪根手指,
所以大家多担待下。

想要实现其实还是很简单的,
第一步,
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一睹为快:

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值