近期在做android指纹相关的功能,谷歌在android6.0及以上版本号对指纹识别进行了官方支持。当时在FingerprintManager和FingerprintManagerCompat这两个之间纠结。当中使用FingerprintManager要引入com.android.support:appcompat-v7包。考虑到包的大小,决定使用v4兼容包FingerprintManagerCompat来实现。

主要实现的工具类FingerprintUtil:验证手机是否支持指纹识别方法callFingerPrintVerify(),主要验证手机硬件是否支持(6.0及以上),有没有录入指纹,然后有没有开启锁屏password。開始验证对于识别成功,失败能够进行对应的回调处理。

 public class FingerprintUtil{private FingerprintManagerCompat mFingerprintManager;private KeyguardManager mKeyManager;private CancellationSignal mCancellationSignal;private Activity mActivity;public FingerprintUtil(Context ctx) {mActivity = (Activity) ctx;mFingerprintManager = FingerprintManagerCompat.from(mActivity);mKeyManager = (KeyguardManager) mActivity.getSystemService(Context.KEYGUARD_SERVICE);}public void callFingerPrintVerify(final IFingerprintResultListener listener) {if (!isHardwareDetected()) {return;}if (!isHasEnrolledFingerprints()) {if (listener != null) {listener.onNoEnroll();}return;}if (!isKeyguardSecure()) {if (listener != null) {listener.onInSecurity();}return;}if (listener != null) {listener.onSupport();}if (listener != null) {listener.onAuthenticateStart();}if (mCancellationSignal == null) {mCancellationSignal = new CancellationSignal();}try {mFingerprintManager.authenticate(null, 0, mCancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {//多次尝试都失败会走onAuthenticationError。会停止响应一段时间。提示尝试次数过多。请稍后再试。

@Override public void onAuthenticationError(int errMsgId, CharSequence errString) { if (listener != null) listener.onAuthenticateError(errMsgId, errString); } //指纹验证失败走此方法,比如小米前4次验证失败走onAuthenticationFailed,第5次走onAuthenticationError @Override public void onAuthenticationFailed() { if (listener != null) listener.onAuthenticateFailed(); } @Override public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) { if (listener != null) listener.onAuthenticateHelp(helpMsgId, helpString); } //当验证的指纹成功时会回调此函数。然后不再监听指纹sensor @Override public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) { if (listener != null) listener.onAuthenticateSucceeded(result); } }, null); } catch (Exception e) { e.printStackTrace(); } } /** * 是否录入指纹,有些设备上即使录入了指纹,可是没有开启锁屏password的话此方法还是返回false * * @return */ private boolean isHasEnrolledFingerprints() { try { return mFingerprintManager.hasEnrolledFingerprints(); } catch (Exception e) { return false; } } /** * 是否有指纹识别硬件支持 * * @return */ public boolean isHardwareDetected() { try { return mFingerprintManager.isHardwareDetected(); } catch (Exception e) { return false; } } /** * 推断是否开启锁屏password * * @return */ private boolean isKeyguardSecure() { try { return mKeyManager.isKeyguardSecure(); } catch (Exception e) { return false; } } /** * 指纹识别回调接口 */ public interface IFingerprintResultListener { void onInSecurity(); void onNoEnroll(); void onSupport(); void onAuthenticateStart(); void onAuthenticateError(int errMsgId, CharSequence errString); void onAuthenticateFailed(); void onAuthenticateHelp(int helpMsgId, CharSequence helpString); void onAuthenticateSucceeded(FingerprintManagerCompat.AuthenticationResult result); } public void cancelAuthenticate() { if (mCancellationSignal != null) { mCancellationSignal.cancel(); mCancellationSignal = null; } } public void onDestroy() { cancelAuthenticate(); mKeyManager = null; mFingerprintManager = null; }

參考了一些资料,做了一些验证。得到一些结论:

1、当指纹识别失败后,会调用onAuthenticationFailed()方法,这时候指纹传感器并没有关闭,谷歌原生系统给了我们5次重试机会,也就是说,连续调用了4次onAuthenticationFailed()方法后,第5次会调用onAuthenticateError(int errMsgId, CharSequence errString)方法,此时errMsgId==7。
2、每次又一次授权,哪怕不去校验。取消时会走onAuthenticateError(int errMsgId, CharSequence errString) 方法,当中errMsgId==5,
3、当系统调用了onAuthenticationError()和onAuthenticationSucceeded()后,传感器会关闭,仅仅有我们又一次授权。再次调用authenticate()方法后才干继续使用指纹识别功能。
4、兼容android6.0下面系统的话,不要使用FingerprintManagerCompat, 低于M的系统版本号。FingerprintManagerCompat不管手机是否有指纹识别模块,均觉得没有指纹识别,能够用FingerprintManager来做。
5、考虑到安全因素,最好authenticate(CryptoObject crypto, CancellationSignal cancel, int flags, AuthenticationCallback callback, Handler handler)时增加CryptoObject 。crypto这是一个加密类的对象,指纹扫描器会使用这个对象来推断认证结果的合法性。

这个对象能够是null,可是这种话。就意味着app无条件信任认证的结果,这个过程可能被攻击。数据能够被篡改。这是app在这种情况下必须承担的风险。

因此。建议这个參数不要置为null。这个类的实例化有点麻烦,主要使用javax的security接口实现。

Android6.0指纹识别开发相关推荐

  1. Android 6.0指纹识别App开发demo

    在Android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚 ...

  2. Android6.0指纹解锁demo

    在Android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚 ...

  3. Android 6.0 指纹识别功能学习(一)----阿冬专栏!!!

    转载自:http://www.cnblogs.com/changyuet/p/5535082.html 由于毕设需要设计增强的身份认证(生物特征认证方式),所以需要学习指纹识别相关的android6. ...

  4. android指纹识别开发公司,FingerDemo实现Android指纹识别

    FingerDemo 指纹识别 最近在研究android的指纹,因为做的项目是金融类,所有想要把指纹添加到项目中, 但是Android手机有很多种类,有些有指纹,有些没有指纹.这就需要各种判断了. 1 ...

  5. Android指纹识别ui显示,Android9.0指纹识别BiometricPrompt的简单使用

    谷歌在Android 9.0 API版本28,发布了生物信息综合验证的基础 API android.hardware.biometrics.BiometricPrompt.BiometricPromp ...

  6. android华为指纹识别开发,华为正在研发“全屏指纹识别+屏下摄像头”共存机型...

    原标题:华为正在研发"全屏指纹识别+屏下摄像头"共存机型 信息显示9月1日中兴将全球首发屏幕下摄像头机型A20 5G,此前业内传言这项技术是华为首发.从现在看来是不可能了,一来中兴 ...

  7. 中控指纹采集器开发指纹识别项目(说明)

    历史指纹识别相关开发版本: 指纹识别开发1.0,开发时间:2018-01-04 指纹识别开发2.0,开发时间:2018-01-04 指纹识别开发3.0,开发时间:2020-01-06 可以从时间上看的 ...

  8. android开发-指纹识别

    在Android 6.0中google终于给Android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚 ...

  9. Android - 指纹识别API示例

    – 前言 需求说明:app经常要验证码验证用户手机号保证安全性,现在想接入指纹识别来代替验证码验证,不支持指纹识别的设备照常用验证码. 了解API Android在23(Android M 6.0)新 ...

最新文章

  1. Scott Hanselman's 推荐的的实用工具集合(2011版)
  2. app是互联网信息服务器地址,详解如何让自己的网站/APP/应用支持IPV6访问,从域名到服务器配置...
  3. python嵌入到C++中
  4. 轻量又高效,Apache Shiro 你值得拥有!
  5. 前端笔试题面试题记录(下)
  6. 2017病毒感染监测(string,BF,附思路与可能WA解析)
  7. IDEA搭建Maven Web(SSM)项目(二)——jar包引入、jetty服务器配置和ssm配置
  8. input file设置默认值_innodb_data_file_path设置--通过错误日志中page大小计算实际值...
  9. 【操作系统/OS笔记11】并发执行的必要性,产生的问题,原子操作,为什么引入锁机制,面包购买的类比
  10. 亚马逊ec2服务器上无法使用sudo执行npm命令的解决办法
  11. XLSTransformer导出多sheet页
  12. 编写程序,求柱体的体积:
  13. 使用简短JS事件代码实现原生北京时间时钟
  14. /usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.8
  15. 二硫化锡/纳米碳/MXene/PANI复合材料研究进展
  16. 推荐9款最佳的编程字体
  17. scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下
  18. 让机器学会断句:基于词典的Bigram分词算法
  19. laravel 将汉字转化成拼音
  20. 高分辨率光学遥感图像水体分类综述2022.03

热门文章

  1. Eclipse中如何更改工作空间(之前一直不知道,几天终于知道了!)。
  2. 【MySQL】源码安装MySQL
  3. Spark2.2出现异常:ERROR SparkUI: Failed to bind SparkUI
  4. node.js入门 - 7.异常处理与多进程开发
  5. Oracle中用户和架构之间的区别?
  6. Android Fragment手柄后退按钮按下[重复]
  7. Git不断询问我ssh密钥密码
  8. win10游戏版如何安装 Windows10安装游戏版的步骤方法
  9. win11网络无法连接怎么办 Windows11连不上网的解决方法
  10. (clion 安装插件联网络失败,pycharm pip联网失败)当电脑选择拨号上网时,解决系统代理被篡改/pip提示“目标计算机积极拒绝,无法连接”的方法! [ 此方法绝对解决系统代理被篡改问题 ]