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

来源:互联网 发布:中国植物数据库 编辑:程序博客网 时间:2024/04/18 08:11

众所周知, 
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()的时候一定要把指纹关闭, 
以免一直占用指纹模块:

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


附源码: 

http://download.csdn.net/download/bamboy_/9782241

转自:尘少

阅读全文
0 0
原创粉丝点击