热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

浅谈Android指纹解锁技术

这篇文章主要介绍了浅谈Android指纹解锁技术,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

什么是指纹解锁技术

根据人的指纹来验证是否能够解锁的技术,类似于通过输入密码来解锁,都是通过一定的数字特征来解锁。

指纹解锁技术原理理解

首先说明每个人的每个指纹信息都是独一无二的,皮肤纹路在图案,断点,交叉点上各不相同,通过光学感应读出指纹的图片信息也是独一无二的。

先保存一个人的指纹特征(图片信息根据算法生成的数据),然后再使用时利用这个人的这个指纹特征去和先前保存的指纹特征做对比,对比一致则解锁成功,对比不一致则解锁失败,对比结果并不是100%一样,而可以按照一个比例来判定,比如90%一样,也可以判定为一致,这个可以根据硬件来设定。

指纹解锁技术的优势和缺点

优点:1.使用便捷,直接使用自身的生物特征就可判断能否使用,判别速度快,而输入数字或者拼图解锁是麻烦的并且容易被别人看到。

缺点:1.安全性不高,指纹是可以被收集的,所以一旦别人收集了你的指纹信息,那需要你指纹解锁的东西将非常危险,而且在不注意的情况下很容易被有心的人收集。

在Android中的应用开发

对Android系统来说,指纹解锁是Android6.0才添加的新功能,到Android P系统还会强化指纹解锁的功能,提供越来越便捷的API。

android.hardware.fingerprint

可以看到在Android P系统中FingerprintDialog以及其中的包含类将会替代FingerprintManager以及其中包含类。原理应该差不多,封装的更简洁易用。

废话少说,在Android手机中如何开发?

1.在应用AndroidManifest.xml文件中添加权限:

2.获取到指纹管理对象的引用:

FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this);  //v4包下的API,包装内部已经判断Android系统版本是否大于6.0,这也是官方推荐的方式
FingerprintManager fingerprint2 = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE); //Android 6.0包下的API

其实指纹对象依次调用三个方法就够了,

第一步

/**
   * Determine if fingerprint hardware is present and functional.
   * @return true if hardware is present and functional, false otherwise.
   */
  fingerprint.isHardwareDetected(); // 判断设备是否支持指纹解锁

第二步

/**
   * Determine if there is at least one fingerprint enrolled.
   * @return true if at least one fingerprint is enrolled, false otherwise
   */
  fingerprint.hasEnrolledFingerprints(); //判断设备是否以保存过指纹信息,至少需要保存过一个

第三步

/**
   * @param crypto object associated with the call or null if none required.  //不太理解,加密指纹特征还是什么,可以不加密置为null
   * @param flags optional flags; should be 0 //设置标记,暂时无用
   * @param cancel an object that can be used to cancel authentication   //取消验证
   * @param callback an object to receive authentication events  //系统认证完成之后,回调该接口
   * @param handler an optional handler for events //处理callback接口后,界面的处理,默认是主线程handler
   */
  fingerprint.authenticate(crypto, flags,cancel,callback,handler) //验证指纹

再来说明各个参数的实现

  crypto = null; //可以置为null,愿意了解的人可以参考底部博客和源码
  flags = 0;
  cancel = new CancellationSignal();
  callback = new FingerprintManagerCompat.AuthenticationCallback() {
      @Override
      public void onAuthenticationError(int errMsgId, CharSequence errString) {
        super.onAuthenticationError(errMsgId, errString);
        //验证错误时,回调该方法。当连续验证5次错误时,将会走onAuthenticationFailed()方法
        handler.obtainMessage(1,errMsgId,0).sendToTarget();
      }

      @Override
      public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
        super.onAuthenticationSucceeded(result);
        //验证成功时,回调该方法。fingerprint对象不能再验证
        handler.obtainMessage(2).sendToTarget();
      }

      @Override
      public void onAuthenticationFailed() {
        super.onAuthenticationFailed();
        //验证失败时,回调该方法。fingerprint对象不能再验证并且需要等待一段时间才能重新创建指纹管理对象进行验证
        handler.obtainMessage(3).sendToTarget();
      }
    };
   handler = new Handler(getMainLooper()) {  //也可以置为null,系统自动处理
      @Override
      public void handleMessage(Message msg) {
      switch (msg.what) {
        case 1:  //验证错误
           //todo 界面处理
          handleErrorCode(msg.arg1);
          break;
        case 2:  //验证成功
           //todo 界面处理
           cancel = null;
           break;
        case 3:  //验证失败
           //todo 界面处理
           cancel = null;
           break;
        default:
          super.handleMessage(msg);
     }
     
   };
  //对应不同的错误,可以有不同的操作
  private void handleErrorCode(int code) {
    switch (code) {
      case FingerprintManager.FINGERPRINT_ERROR_CANCELED:
        //todo 指纹传感器不可用,该操作被取消
        break;
      case FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE:
        //todo 当前设备不可用,请稍后再试
        break;
      case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:
        //todo 由于太多次尝试失败导致被锁,该操作被取消
        break;
      case FingerprintManager.FINGERPRINT_ERROR_NO_SPACE:
        //todo 没有足够的存储空间保存这次操作,该操作不能完成
        break;
      case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
        //todo 操作时间太长,一般为30秒
        break;
      case FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS:
        //todo 传感器不能处理当前指纹图片
        break;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
author-avatar
rukal2502900501_324
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有