Android指纹识别功能
作者:qq_28377423 发布时间:2023-11-04 05:09:18
指纹识别作为最新兴起的用户身份验证机制,已经被越来越多的应用程序所采用,相比传统的密码九宫格等验证方法,指纹识别更加安全,如今越来越多的安卓手机配备了指纹识别模块,我们就来尝试一下这一项新兴的技术
首先创建一个安卓项目,指纹识别作为最近几年才兴起的技术,对安卓api level要求较高(api 23以上即jdk6.0以上)
创建一个button用于触发指纹识别,并在MainActivity里对其监听,代码如下
Button button=(Button)findViewById(R.id.checkFingerPrint);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("btn","开始识别");
checkFingerPrint();
}
});
在checkFingerPrint方法里调用系统提供的指纹识别函数FingerprintManagerCompat的authenticate,代码如下
private void checkFingerPrint(){
FingerprintManagerCompat.from(this).authenticate(null,0,null,new MyCallBack(),null);
}
在这里解释一下这个方法里各个参数的含义
第一个参数是用于通过指纹验证取出AndroidKeyStore中的key的对象
第二个参数可以用来取消指纹验证,如果想手动关闭验证,可以调用该参数的cancel方法
第三个参数没什么意义,就是传0就好了
第四个参数最重要,由于指纹信息是存在系统硬件中的,app是不可以访问指纹信息的,所以每次验证的时候,系统会通过这个callback告诉你是否验证通过、验证失败等
第五个参数是handler,fingerprint中的消息都通过这个handler来传递消息,如果你传空,则默认创建一个在主线程上的handler来传递消息,没什么用,0传null好了
通过这个函数api我们能够看出来第四个参数最重要,他是决定指纹成功和失败以及验证失败后的后续操作,接下来我们就通过继承重写这个函数(注意参数一定要跟父类一致,博主就是没写对一开始函数不执行),代码如下
public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback{
private static final String TAG = "MyCallBack";
@Override
public void onAuthenticationFailed(){
Log.d(TAG,"指纹错误");
}
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result){
Log.d(TAG,"指纹正确");
}
}
这里我们给指纹识别正确和错误添加了打印在控制台的后续动作,当然继承的这个类还有其他的方法onAuthenticationError和onAuthenticationHelp,这两个方法是处理识别不成功的。这里要区分一下识别不成功和识别错误的区别,前者是指没有识别到指纹而后者是识别到了指纹但不匹配
接下来我们用模拟器做测试,出于安全的考虑谷歌暂时没有开放指纹存储的功能,因此该功能使用的是系统里的指纹,也就是我们传统的用于解锁屏幕时设置的指纹,为了测试我们去模拟器里设置一个指纹
接下来进到程序里面去测试我们的指纹识别,首先是用已经录入的指纹,通过控制台可以看到已经执行了识别成功的方法
然后我们换错误的指纹,再试一次,可以看到错误指纹的方法也已经被调用了
接下来贴出全部的代码供大家参考
package com.example.john.fingerprinttest;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.checkFingerPrint);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("btn","开始识别");
checkFingerPrint();
}
});
}
private void checkFingerPrint(){
FingerprintManagerCompat.from(this).authenticate(null,0,null,new MyCallBack(),null);
}
public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback{
private static final String TAG = "MyCallBack";
@Override
public void onAuthenticationFailed(){
Log.d(TAG,"指纹错误");
}
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result){
Log.d(TAG,"指纹正确");
}
}
}
这个程序只实现了简单的指纹识别,当然作为一个涉及到安全性的功能,谷歌提供的东西远不止这些,比如多次识别错误的保护等等。
来源:https://blog.csdn.net/qq_28377423/article/details/72868495


猜你喜欢
- 导语在使用flutter 自带图片组件的过程中,大家有没有考虑过flutter是如何加载一张网络图片的? 以及对自带的图片组件我们可以做些什
- 关于《JavaCV的摄像头实战》系列《JavaCV的摄像头实战》顾名思义,是使用JavaCV框架对摄像头进行各种处理的实战集合,这是欣宸作为
- 相信大家都经常使用String 的split方法,但是大家有没有遇到下面的这种情况:大家想想下面的代码执行结果是什么public stati
- Android UI 实现 * 详解listview 的使用步骤简单的listview * 实现1.实现效果图2.需要掌握的知识listvi
- 前言在创建表格时,如果表格内容出现跨页显示的时候,默认情况下该表格的表头不会在下一页显示,在阅读体验上不是很好。下面分享一个方法如何在表格跨
- package com.infomorrow.parser_report;import org.junit.Test;public clas
- 本文实例讲述了Android定时器和Handler用法。分享给大家供大家参考。具体分析如下:一、环境:主机:WIN8开发环境:Android
- 在Android开发中,往往要用到自定义的控件来实现我们的需求或效果。在使用自定义 控件时,难免要用到自定义属性,那怎么使用自定义属性呢?在
- 一、Log4net官方网站:https://logging.apache.org/log4net/。下载二进制dll库:包中提供了针对各个版
- 当我们需要在Unity客户端做一个限制功能,比如按钮 (最好是发送验证码按钮)要求每天只能点击三次,等到第二天又有三次机会,这个过程不涉及到
- 本文向大家分享的主要内容是Java面试中一个常见的知识点:volatile关键字。本文详细介绍了volatile关键字的方方面面,希望大家在
- 解析和遍历一个HTML文档如何解析一个HTML文档:String html = "<html><head>
- 类注解@component 标注类,泛指各种组件,类不属于各种分类的时候,用它做标注。@Service 标注类,声明该类为业务层组件,用于处
- 这个问题困扰了很久,有些类不是controller在使用autowired注入的类显示为空,找到网上的方法是在类初始化时主动注入被Autow
- 引言你在服务端的安全管理使用了 Spring Security,用户登录成功之后,Spring Security 帮你把用户信息保存在 Se
- 项目场景:适用于接口数据敏感信息,比如 明文传输姓名、居住地址、手机号等信息,如果存在明文传输敏感数据问题、及数据泄漏风险,则可使用此方法加
- 背景笔者所在项目组在搭建一个全新项目的时候选用了SpringBoot3.x,项目中应用了很多SpringBoot2.x时代相关的第三方组件例
- 一、需求Jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是>需要编译和打包的,一般情况下编译和打包都是用ma
- C++ 中const修饰虚函数实例详解【1】程序1#include <iostream>using namespace std;
- 一、概述在写代码之前,我必须得问几个问题:1、ViewGroup的职责是啥?ViewGroup相当于一个放置View的容器,并且我们在写布局