Android指纹识别功能

所属分类: 软件编程 / Android 阅读数: 48
收藏 0 赞 0 分享

指纹识别作为最新兴起的用户身份验证机制,已经被越来越多的应用程序所采用,相比传统的密码九宫格等验证方法,指纹识别更加安全,如今越来越多的安卓手机配备了指纹识别模块,我们就来尝试一下这一项新兴的技术

首先创建一个安卓项目,指纹识别作为最近几年才兴起的技术,对安卓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,"指纹正确");
  }
 }
}

这个程序只实现了简单的指纹识别,当然作为一个涉及到安全性的功能,谷歌提供的东西远不止这些,比如多次识别错误的保护等等。

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

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多