指纹识别是在Android 6.0之后新增的功能,因此在使用的时候需要先判断用户手机的系统版本是否支持指纹识别,只
有硬件和软件版本支持指纹识别,才能进行指纹识别操作。最近项目需要指纹识别方面的功能,提前做了个预研,写了
个demo,但发现这块也是有坑的。废话不多说直接撸码,高手勿喷。
根据Android自带API中提供了FingerprintManager 类,顾名思义这个类是用来管理指纹和指纹识别的。但是普通应用
能够使用的方法却不多,先说普通第三方应用,通过authenticate方法来验证指纹是否合法,这个方法中主要关注
AuthenticationCallback这个参数的回调。其中
AuthenticationCallback会有几个方法需要关注:
onAuthenticationError:指纹识别失败,当系统调用了onAuthenticationError()再次调用
authenticate()方法后才能继续使用指纹识别功能。
onAuthenticationHelp :指纹识别的提示,比如一些手指移动过快或者其他的原因导致的问题,
这个方法中会有一个helpcode值,根据这个值来处理即可。
onAuthenticationSucceeded: 指纹识别成功,携带参数AuthenticationResult,该参数中会带
有一个Fingerprint对象,但是普通应用调用的时候该对象为空,这都是后话。
onAuthenticationFailed :指纹验证通过,认为该交互式一个指纹,但不是合法指纹,也就是
指纹库中没有该指纹。这几个方法都是普通应用经常使用的,开发基本够了。
再赘述几点:
1.关于onAuthenticationSucceeded方法中回传回来的AuthenticationResult所携带的Fingerprint
为什么为空,是因为普通应用没有权限。FingerprintService做了明确的控制
这个地方曾经入坑了,后来一想还是自己不够敏感,指纹这种东西不是普通应用所能访问的。
2.指纹存储在data/system/usets/0/fpdata目录下,一般存的是指纹的模板,不是图像。
3.谷歌原生的Nesus6P目前支持单一指纹多次录入,就是录入食指后又可以添加食指指纹,存
在两个食指指纹。这种情况在部分需要确定是哪个手指的场景下会有问题。就目前所知需要指
纹厂商修改指纹存储策略。或者有人知道在上层代码可以控制的话,也可以告诉下。上面只是
预研的时候一些小总结,具体实现在demo可以查看。
源码地址
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!