android  指纹识别调用实现方法及示例代码

activity_main.xml源码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center"
  android:orientation="vertical"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.liu.finger.MainActivity"> 

  <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:textSize="18sp" /> 

  <Button
    android:id="@+id/btn_activity_main_finger"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textView"
    android:layout_marginTop="54dp"
    android:text="指纹识别" />
</LinearLayout> 

MainActivity.java源码

package com.liu.finger; 

import android.Manifest;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; 

public class MainActivity extends FragmentActivity {
  FingerprintManager manager;
  KeyguardManager mKeyManager;
  private final static int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 0;
  private final static String TAG = "finger_log"; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    manager = (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);
    mKeyManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
    Button btn_finger = (Button) findViewById(R.id.btn_activity_main_finger);
    btn_finger.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (isFinger()) {
          Toast.makeText(MainActivity.this, "请进行指纹识别", Toast.LENGTH_LONG).show();
          Log(TAG, "keyi");
          startListening(null);
        }
      }
    }); 

  } 

  public boolean isFinger() { 

    //android studio 上,没有这个会报错
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
      Toast.makeText(this, "没有指纹识别权限", Toast.LENGTH_SHORT).show();
      return false;
    }
    Log(TAG, "有指纹权限");
    //判断硬件是否支持指纹识别
    if (!manager.isHardwareDetected()) {
      Toast.makeText(this, "没有指纹识别模块", Toast.LENGTH_SHORT).show();
      return false;
    }
   Log(TAG, "有指纹模块");
    //判断 是否开启锁屏密码 

    if (!mKeyManager.isKeyguardSecure()) {
      Toast.makeText(this, "没有开启锁屏密码", Toast.LENGTH_SHORT).show();
      return false;
    }
    Log(TAG, "已开启锁屏密码");
    //判断是否有指纹录入
    if (!manager.hasEnrolledFingerprints()) {
      Toast.makeText(this, "没有录入指纹", Toast.LENGTH_SHORT).show();
      return false;
    }
    Log(TAG, "已录入指纹"); 

    return true;
  } 

  CancellationSignal mCancellationSignal = new CancellationSignal();
  //回调方法
  FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errorCode, CharSequence errString) {
      //但多次指纹密码验证错误后,进入此方法;并且,不能短时间内调用指纹验证
      Toast.makeText(MainActivity.this, errString, Toast.LENGTH_SHORT).show();
      showAuthenticationScreen();
    } 

    @Override
    public void onAuthenticationHelp(int helpCode, CharSequence helpString) { 

      Toast.makeText(MainActivity.this, helpString, Toast.LENGTH_SHORT).show();
    } 

    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { 

      Toast.makeText(MainActivity.this, "指纹识别成功", Toast.LENGTH_SHORT).show();
    } 

    @Override
    public void onAuthenticationFailed() {
      Toast.makeText(MainActivity.this, "指纹识别失败", Toast.LENGTH_SHORT).show();
    }
  }; 

  public void startListening(FingerprintManager.CryptoObject cryptoObject) {
    //android studio 上,没有这个会报错
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
      Toast.makeText(this, "没有指纹识别权限", Toast.LENGTH_SHORT).show();
      return;
    }
    manager.authenticate(cryptoObject, mCancellationSignal, 0, mSelfCancelled, null); 

  } 

  /**
   * 锁屏密码
   */
  private void showAuthenticationScreen() { 

    Intent intent = mKeyManager.createConfirmDeviceCredentialIntent("finger", "测试指纹识别");
    if (intent != null) {
      startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
    }
  } 

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
      // Challenge completed, proceed with using cipher
      if (resultCode == RESULT_OK) {
        Toast.makeText(this, "识别成功", Toast.LENGTH_SHORT).show();
      } else {
        Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
      }
    }
  } 

  private void Log(String tag, String msg) {
    Log.d(tag, msg);
  }
} 

通过此文希望能帮助开发Android 指纹识别的朋友,谢谢大家对本站的支持!

(0)

相关推荐

  • Android指纹识别API初试

    在android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题  ①在使用FingerPrintManager这个类实现的时候发现了很多问题,这个类里面的一些函数是被hide了的,也就是我们不能调用,比如enroll(),也就是说,当前的官方支持其实是有限的,我们能读取到本机已经存在的指纹(用于解锁的),然后验证这些指纹,但是不能让用户在app使用的时候录入一个指纹,用于app的其他功能,这个是一个缺陷吧目前来说,下面的图也是展示了

  • Android 指纹识别开发实例

    Android M指纹的资料太少,经过一段时间阅读原生Android代码,写了以下例子,贡献出来给需要帮助的人. 以下内容基于64位的高通CPU,搭载fpc1020芯片,此部分代码在原生android上做了更改,以应付工厂指纹的测试.原生android指纹录入需要采集10次(因不同的芯片而定). 代码简单说明: 1. FingerPrintEnrollBase类: 重要的是 Java代码 public interface Listener { void onEnrollmentHelp(Char

  • Android6.0指纹识别开发实例详解

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

  • Android获取apk签名指纹的md5值(防止重新被打包)的实现方法

    本文实例讲述了Android获取apk签名指纹的md5值以防止重新被打包的实现方法.分享给大家供大家参考,具体如下: 做个记录(这里只是Java层的签名校验,java层容易被破解,我建议apk加固下) 获取md5值来进行Apk签名校验, 可以防止apk重新被打包. 下面我说说怎么获取apk签名的md5值(有三种方法) 1.用代码获取签名指纹的md5值 /** * MD5加密 * @param byteStr 需要加密的内容 * @return 返回 byteStr的md5值 */ public

  • Android中的指纹识别demo开发实例

    指纹识别是在Android 6.0之后新增的功能,因此在使用的时候需要先判断用户手机的系统版本是否支持指纹识别.另外,实际开发场景中,使用指纹的主要场景有两种: 纯本地使用.即用户在本地完成指纹识别后,不需要将指纹的相关信息给后台. 与后台交互.用户在本地完成指纹识别后,需要将指纹相关的信息传给后台. 由于使用指纹识别功能需要一个加密对象(CryptoObject)该对象一般是由对称加密或者非对称加密获得.上述两种开发场景的实现大同小异,主要区别在于加密过程中密钥的创建和使用,一般来说,纯本地的

  • Android 6.0指纹识别App开发案例

    在android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚啊.在google全新发布的nexus设备:nexus 5x和nexus 6p中都携带了一颗指纹识别芯片在设备的背面,如下图(图片来自网络): 笔者手中的设备就是图上的那台黑色的nexus 5x,话说这台机器很是好看呢!手感超棒! 废话不多说,下面我出一个指纹识别的demo app,并且详细说明怎么

  • Android7.0指纹服务FingerprintService实例介绍

    指纹服务是Android系统中一个较为简单的服务(相比于AMS,WMS等),也比较独立,功能上包括几点 指纹的录入与删除 指纹认证 指纹的安全策略(错误次数判定) 和其他的system service 一样,应用程序通过FingerprintManager实现与FingerprintService的通信,除了上面所说的功能之外,FingerprintManager提供了一些别的的接口,重要的接口都会要求系统级别的权限,并且也不是公开的api(指纹的录入,删除,重命名,重置错误计数等) /** *

  • Android指纹登录工具类封装

    本文实例为大家分享了Android指纹登录工具类的封装代码,供大家参考,具体内容如下 核心 Android 指纹 是在 6.0 才出来的一个重要的功能 @RequiresApi(api = Build.VERSION_CODES.M) 核心的两个 api: FingerprintManager KeyguardManager step1 判断android 版本,如果小于 6.0 支持不了指纹 if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){

  • Android 指纹识别详解及实现方法

    最近项目需要使用到指纹识别的功能,查阅了相关资料后,整理成此文. 指纹识别是在Android 6.0之后新增的功能,因此在使用的时候需要先判断用户手机的系统版本是否支持指纹识别.另外,实际开发场景中,使用指纹的主要场景有两种: 纯本地使用.即用户在本地完成指纹识别后,不需要将指纹的相关信息给后台. 与后台交互.用户在本地完成指纹识别后,需要将指纹相关的信息传给后台. 由于使用指纹识别功能需要一个加密对象(CryptoObject)该对象一般是由对称加密或者非对称加密获得.上述两种开发场景的实现大

  • Android6.0指纹识别开发案例

    Android M指纹的资料太少,经过一段时间阅读原生Android代码,写了以下例子,贡献出来给需要帮助的人. 以下内容基于64位的高通CPU,搭载fpc1020芯片,此部分代码在原生android上做了更改,以应付工厂指纹的测试.原生android指纹录入需要采集10次(因不同的芯片而定). 代码简单说明: 1. FingerPrintEnrollBase类: 重要的是 public interface Listener { void onEnrollmentHelp(CharSequenc

随机推荐