Android指纹识别

前言

安卓的指纹识别功能是在Android 6.0(SDK:23)的时候提供出来的,主要使用的就是FingerprintManager这个类并且后来在support v4库中添加了FingerprintManagerCompat类,它主要也是对FingerprintManager进行了一定的封装。

在Android9.0(SDK:28)之后,谷歌已经不再推荐使用FingerprintManager,而是新增了BiometricPrompt这个类,如类名所示,在生物识别未来的发展中,除了指纹设备验证,可能还有添加面容验证等功能。而目前的话,还仅支持指纹识别,不过还是在指纹识别上进行了统一,例如:要求开发者使用统一的指纹识别UI,不再支持开发者自定义指纹识别UI了,不过如图,官方文档中指纹识别UI界面上的标题、描述等还是可以让开发者自己去设置的,可是灵活性还是比较差。

兼容性问题

如前言所描述,在我们开发指纹识别的功能时一定要做好兼容性的处理,在Android SDK23 - SDK27之间我们使用support v4库中提供的FingerprintManagerCompat,而在Android SDK28以后,我们最好是使用BiometricPrompt,下图为版本判断代码

指纹识别开发

首先,我们要创建有关指纹设备的类并且使用该类判断手机是否能够正常使用指纹识别功能。

Android6.0创建指纹识别有关的类:

Android9.0创建指纹识别有关的类:

在Android SDK30之前,我们都可以使用FingerprintManagerCompat提供的方法来判断手机是否能够正常使用指纹识别功能

Android6.0判断手机是否能够正常使用指纹识别功能:

isHardwareDetected():该方法用来判断系统硬件是否支持指纹识别,若手机系统的硬件不支持指纹识别可以弹框提示用户;

hasEnrolledFingerprints():该方法是用来判断你的设备在系统设置里面是否设置了指纹,若设备未设置指纹,可以提示用户并且让用户跳转到系统的设置界面,自己去添加指纹;

Android10判断手机是否能够正常使用指纹识别功能:

可以通过创建BiometricManager,并且使用该类提供的canAuthenticate()方法就可以直接判断设备是否能够正常使用指纹识别功能。


当我们做完了版本判断和设备是否能够正常使用指纹识别功能判断后,就可以开始调用指纹识别的功能了。

指纹识别功能最主要的就是authenticate()这个方法!

Android6.0指纹识别方法:

首页我们来介绍一下authenticate方法中的参数

crypto:这是一个加密类的对象,指纹扫描器会使用这个对象来判断认证结果的合法性。这个对象可以是null,但是这样的话,就意味这app无条件信任认证的结果。app在这种情况下是得承担风险的。因此,建议这个参数不要置为null;

cancel:这是CancellationSignal类的一个对象,这个对象是用来在指纹识别器扫描用户指纹的时候取消当前的扫描操作,如果不取消的话,那么指纹扫描器会一直扫描到超时(一般为30s,取决于具体的厂商实现),这样的话就会比较耗电;

flags:标志位,根据官方提示,默认为0;

callback:指纹识别结果的回调,是指纹识别中最重要的参数了,在回调中我们可以处理指纹识别的各种情况;

handler:这是Handler类的对象,如果这个参数不为null的话,那么FingerprintManager将会使用这个handler中的looper来处理来自指纹识别硬件的消息。通常来讲,开发是不用提供这个参数的,可以直接置为null,因为FingerprintManager会默认使用app的main looper来处理;

Android9.0指纹识别方法:

exceutor:作用与Android6.0的handler 类似,用来分发指纹识别的回调事件。

另外的三个参数也可以在Andorid6.0的authenticate中找到对应的参数。


最后,我们来介绍一下指纹认证之后的回调方法,这可是非常重要的。

Android6.0指纹认证回调方法:

首先我们来解释一下这些接口的含义:

onAuthenticationError(int errMsgId, CharSequence errString):该接口会在系统指纹认证出现不可恢复的错误的时候才会调用,并且参数errorCode给出的错误码标识了错误原因。比如,连续识别错误5次指纹、指纹硬件不可用等等。

onAuthenticationFailed():该接口会在系统指纹认证失败的情况的下回调,此失败和onAuthenticationError的失败是不一样的,这里的认证失败指的是所有的指纹信息都采集完整,没有异常,但是这个采集的指纹和之前注册的指纹不相符的。

onAuthenticationHelp(int helpMsgId, CharSequence helpString):该接口是指出现了可以恢复的异常的情况下会回调,例如指纹采集不完整。

onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result):该接口则是指纹认证成功的情况下会回调的。我们在调用authenticate的时候,我们的CryptoObject不是null,所以我们可以在这个接口中通过AuthenticationResult来获得Cipher对象然后调用它的doFinal方法。doFinal方法会检查结果是不是被拦截或者篡改过,如果是的话会抛出一个异常。当我们发现这些异常的时候都应该将认证当做失败来处理。

Android9.0指纹认证回调方法:

同理,新的回调的方法含义也差不多。详情可以看技术文档,这里贴上链接:android.hardware.biometrics  |  Android Developers

DEMO

这里我就贴一下简单的开发DEMO,详细的处理,可以根据不同的需求,自己去进行相应的开发。

总结

指纹识别的开发步骤:

1.开发者要进行版本的判断,然后根据版本的判断在Android6.0和Android9.0使用不同的指纹认证类;

2.然后验证设备是否支持指纹认证,若设备可以,则继续步骤3,若不行,则提示用户;

3.最后我们就能调用authenticate方法并创建该方法中所需要的参数来唤起指纹认证界面;

注意:一定要处理好回调的逻辑!


                                         2021年10月15日程序猿小钟带着【Android指纹识别】到此一游~

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

推荐阅读更多精彩内容