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
猜你喜欢
- 一、达梦数据库简介说明:有关国产数据库完整的博客太少了,所以就想弄一个完整的专栏给大家提供一些帮助。在现在这种国际形势下,网络安全是每个企业
- Java二维数组Java 语言中提供的数组是用来存储固定大小的同类型元素。1.二维数组初始化和声明数组变量的声明,和创建数组可以用一条语句完
- springboot aop里的@Pointcut()的配置@Pointcut("execution(public * com.w
- 问题来源一般来说,一个稍微大些的项目都会有一些依赖的Jar包,而在将项目部署到服务器的过程中,如果没有持续集成环境的话,也就是说服务器不支持
- 关于SQLiteSQLite是一款轻型的嵌入式的遵守ACID的关系型数据库管理系统,诞生已有15个年头了。随着移动互联的发展,现在得到了更广
- 前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK,可以说EDG面对如此强大的对手,想赢是比较难的,为了
- 首先,想要明白hashCode的作用,你必须要先知道Java中的集合。 总的来说,Java中的集合(Collection)有两类,一类是Li
- 一、之前旧的写法class Singleton{ private Singleton() {} &nb
- 1、线性表定义线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特
- 本文实例为大家分享了C#实现截图工具小项目的具体代码,供大家参考,具体内容如下1.起因一直用的截图是qq的截图,所以想要实现一个简单点的截图
- 经测试,是环绕通知改变了返回值,切面方法需要有返回值,来代替被代理方法返回结果改成如下即可:@Around("point_upda
- 1 泰勒级数介绍近期工作中需要使用matlab建模,期间做案例的时候有个方程:sin(x)=0,要求不使用现有api进行求解,然后有点懵,不
- 这篇文章主要介绍了Java中遍历ConcurrentHashMap的四种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- 目录一、需求二、步骤三、结果一、需求把以下txt中含“baidu”字符串的链接输出到一个文件,否则输出到另外一个文件。二、步骤1.LogMa
- 前言数据驱动测试是相同的测试脚本使用不同的测试数据执行,测试数据和测试行为完全分离。数据驱动是做自动化测试中很重要的一部分,数据源的方案也是
- 前言有时,我们可能需要从 PDF 文档中提取表格数据,例如,当PDF发票的表格中存储了一些有用的信息,需要提取数据以进行进一步分析时。在这篇
- 访问静态资源的配置及顺序今天在玩SpringBoot的demo的时候,放了张图片在resources目录下,启动区访问的时候,突然好奇是识别
- SpringMVC获取表单数据1、实体类package cn.hadron.bean;import java.io.Serializable
- 前言本文主要介绍的是关于C#中LINQ多条件JOIN时为什么可以使用匿名类的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细
- 1.概览该教程中,我将向你展示:如何在测试时设置spring boot 日志级别。虽然我们可以在测试通过时忽略日志,但是如果需要诊断失败的测