android 指纹识别调用实现方法及示例代码_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 指纹识别的朋友,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
指纹识别
android 调用指纹识别、ios 调用指纹识别、matlab实现指纹识别、指纹识别实现、restful api调用示例,以便于您获取更多的相关知识。

时间: 2024-10-25 14:45:09

android 指纹识别调用实现方法及示例代码_Android的相关文章

Android 对话框(Dialog)大全详解及示例代码_Android

Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Acti

Android 进度条使用详解及示例代码_Android

在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先来找图看看,做这个图完成不用图片就可以做到了. 看下xml布局文件,其实就是直接用xml写的在加两个属性设置一下就好了,一个style,另一个是background. <ProgressBar android:id="@+id/pb_progressbar" style="

Android Fragment动态创建详解及示例代码_Android

Android Fragment 动态创建 Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment.可以把Fragment任务模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除. Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影

Android实现带有删除按钮的EditText示例代码_Android

一.首先来看看效果 这是一个带有删除按钮的输入文本框, 需要新建一个类继承自EditText, 先把代码贴出来, 然后在解释: 示例代码如下: public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Context mContext; public EditTextWit

Android控件ListView用法(读取联系人示例代码)_Android

示例代码: 这是一个读取联系人的代码: 复制代码 代码如下: package com.ui.domain; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.database.Cursor; import android.database.DataSetObserver; import android.graphics.Color; import andro

android禁止锁屏保持常亮(示例代码)_Android

在播放video的时候在mediaplayer mMediaPlayer.setScreenOnWhilePlaying(true); 已经设置了,在原生的android没有问题和在defy上也没有问题,一到三星的galaxy上就有问题,不知道三星他们改了哪些地方.一般的话设置了播放视频屏幕没有自动.但是在三星上就出了问题. 只好再找找.一般的话设置有两种方法. 如下: 复制代码 代码如下: 1. getWindow().addFlags(WindowManager.LayoutParams.F

Android 屏蔽和捕获Home键的示例代码_Android

在Level5以上(包含)中,Activity类中的方法:public void onAttachedToWindow ()就能对Home键进行捕获. 具体代码如下: MainActivity.java package com.lingdududu.test; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.WindowManager;

Android Activity与Intent详解及示例代码_Android

Android有三个基础组件Activity,Service和BroadcastReceiver,他们都是依赖Intent来启动.本文介绍的是Activity的生命周期以及针对Activity的Intent使用.        之前的例子一直都是使用Activity,在一个Layout XML与一个Activity捆绑的情况下可以视为一个Form,多个Layout XML与一个Activity捆绑的话那就是个Application本身了.Intent可以分为显式Intent和隐式Intent:显

Android 的触摸事件详解及示例代码_Android

由于触摸(Touch)而触发的事件 Android的事件:onClick, onScroll,onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION_DOWN,表示按下了屏幕.之后,touch将会有后续事件,可能是: ACTION_MOVE //表示为移动手势 ACTION_UP //表示为离开屏幕 ACTION_CANCEL //表示取消手势,不会由用户产生,而是由程序产生的 一个Action_DOWN, n个ACTION_MOVE, 1个ACTION_