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

众所周知,
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一睹为快:


手机浏览器扫码直接下载安装
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,391评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,394评论 2 45
  • 春天悄悄来的时候,正是绿柳啼莺的欢场,处处新鲜的不像样。最惹人的,还是校园里转过角就能相遇的桃,慵懒的猫咪慵...
    掩耳闻风阅读 263评论 4 4
  • 黑云布满苍穹,呈压城之势,慢慢靠拢,一场风雨即将来临。 山庄很静,地处偏僻的荒野。视线开阔一面,可以看到低飞的大只...
    陌幽阅读 506评论 4 8
  • 喝水都会发胖?别被误导了!只要吃对东西就能帮助你减肥! 今天减肥食物推荐系列的主角就是它:大白菜 记得小时候爷爷种...
    杯子小哥阅读 422评论 0 1