Android 实现指纹识别demo

demo链接:https://download.csdn.net/download/meixi_android/10796468

1、指纹工具类:

/*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/8/30 09*/public class FingerprintManagerUtil {private static FingerprintManagerCompat fingerprintManagerCompat;private static CancellationSignal cancellationSignal;private FingerprintManagerUtil() {}/*** 开始进行指纹验证** @param context                    上下文* @param fingerprintListener 指纹验证回调接口*/public static void startFingerprinterVerification(Context context, final FingerprintListener fingerprintListener) {fingerprintManagerCompat = FingerprintManagerCompat.from(context);// 是否支持指纹验证if (fingerprintManagerCompat == null || !fingerprintManagerCompat.isHardwareDetected()) {if (fingerprintListener != null)fingerprintListener.onNonsupport();return;}// 是否录入了指纹if (!fingerprintManagerCompat.hasEnrolledFingerprints()) {if (fingerprintListener != null)fingerprintListener.onEnrollFailed();return;}// 回调可以开始进行认证if (fingerprintListener != null)fingerprintListener.onAuthenticationStart();cancellationSignal = new CancellationSignal();fingerprintManagerCompat.authenticate(null, 0, cancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {@Overridepublic void onAuthenticationError(int errMsgId, CharSequence errString) {// 验证出错回调,指纹传感器会关闭一段时间super.onAuthenticationError(errMsgId, errString);if (fingerprintListener != null)fingerprintListener.onAuthenticationError(errMsgId, errString);}@Overridepublic void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {// 验证帮助回调super.onAuthenticationHelp(helpMsgId, helpString);if (fingerprintListener != null)fingerprintListener.onAuthenticationHelp(helpMsgId, helpString);}@Overridepublic void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {// 验证成功super.onAuthenticationSucceeded(result);if (fingerprintListener != null)fingerprintListener.onAuthenticationSucceeded(result);}@Overridepublic void onAuthenticationFailed() {// 验证失败  指纹验证失败后,指纹传感器不会立即关闭指纹验证,// 系统会提供5次重试的机会,即调用5次onAuthenticationFailed()后,才会调用onAuthenticationError()super.onAuthenticationFailed();if (fingerprintListener != null)fingerprintListener.onAuthenticationFailed();}}, null);}/*** 取消指纹验证*/public static void cancel() {if (cancellationSignal != null && !cancellationSignal.isCanceled())cancellationSignal.cancel();}/*** 指纹验证回调监听*/public interface FingerprintListener {/*** 手机或系统不支持指纹验证时回调*/void onNonsupport();/*** 手机支持指纹验证,但是还没有录入指纹时回调*/void onEnrollFailed();/*** 可以进行指纹验证时回调,该方法主要作用用于在进行指纹验证之前做一些操作,比如弹出对话框*/void onAuthenticationStart();/*** 指纹验证成功时回调** @param result {@link FingerprintManagerCompat.AuthenticationResult} 对象*/void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result);/*** 验证失败时回调* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* 指纹验证失败后,指纹传感器不会立即关闭指纹验证,系统会提供5次重试的机会,即调用* 5次 {@link #onAuthenticationFailed()} 后,才会调用 {@link #onAuthenticationError(int, CharSequence)}*/void onAuthenticationFailed();/*** 验证出错时回调,指纹传感器会关闭一段时间,具体时间根据厂商不同有所区别** @param errMsgId  错误信息id* @param errString 错误信息描述*/void onAuthenticationError(int errMsgId, CharSequence errString);/*** 验证帮助回调** @param helpMsgId  帮助信息id* @param helpString 帮助信息描述*/void onAuthenticationHelp(int helpMsgId, CharSequence helpString);}/*** FingerprintListener 回调监听适配器,减少不必要方法的重写,只需要重写需要处理的对应方法即可*/public abstract static class FingerprintListenerAdapter implements FingerprintListener {@Overridepublic void onNonsupport() {}@Overridepublic void onEnrollFailed() {}@Overridepublic void onAuthenticationStart() {}@Overridepublic void onAuthenticationFailed() {}@Overridepublic void onAuthenticationError(int errMsgId, CharSequence errString) {}@Overridepublic void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {}}
}

2、activity调用以及指纹识别验证回调方法(调用后,触摸手机指纹按钮即可实现指纹识别)

private AlertDialog alertDialog;
// 调用指纹验证方法
private void startVerification() {FingerprintManagerUtil.startFingerprinterVerification(this,new FingerprintManagerUtil.FingerprintListenerAdapter() {@Overridepublic void onAuthenticationStart() {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this).setTitle("指纹验证").setMessage("指纹验证测试").setCancelable(false).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {FingerprintManagerUtil.cancel();}});alertDialog = builder.create();alertDialog.show();}@Overridepublic void onNonsupport() {Log.i("MainActivity", "onNonsupport");Toast.makeText(MainActivity.this, "不支持指纹验证", Toast.LENGTH_SHORT).show();}@Overridepublic void onEnrollFailed() {Log.i("MainActivity", "onEnrollFailed");Toast.makeText(MainActivity.this, "没有录入指纹", Toast.LENGTH_SHORT).show();}@Overridepublic void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {alertDialog.dismiss();Log.i("MainActivity", "onAuthenticationSucceeded result = [" + result + "]");Toast.makeText(MainActivity.this, "验证成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onAuthenticationFailed() {Log.i("MainActivity", "onAuthenticationFailed");Toast.makeText(MainActivity.this, "验证失败", Toast.LENGTH_SHORT).show();}@Overridepublic void onAuthenticationError(int errMsgId, CharSequence errString) {Log.i("MainActivity", "onAuthenticationError errMsgId = [" + errMsgId + "], errString = [" + errString + "]");Toast.makeText(MainActivity.this, "提示: " + errString, Toast.LENGTH_SHORT).show();}@Overridepublic void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {Log.i("MainActivity", "onAuthenticationHelp helpMsgId = [" + helpMsgId + "], helpString = [" + helpString + "]");Toast.makeText(MainActivity.this, "提示: " + helpString, Toast.LENGTH_SHORT).show();}});
}

需要指纹识别权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作161:eachart渲染步骤

第一步 页面 第二步 第三步 方法调用

vue js xlsx 读取 本地 excel

最近在写一个人力资源管理系统&#xff0c;主要目的是将本地的excel文件读取解析&#xff0c;将有效数据传到后台。 下文介绍流程&#xff0c;文末附有参考文章。 1、安装npm包xlsx yarn add xlsx2、结合上传组件和自己写的读取方法readXLSX&#xff0c;可以进行本地excel读…

Android 上下滚动字幕实现

首先values文件夹下添加或创建attrs文件&#xff0c;如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <resources><!--//垂直滚动字幕--><declare-styleable name"VerticalRollingTextView"><!--文字颜色-…

mongoose获取最高分

我的需求&#xff1a;获取所有成绩中的最高分。 方法&#xff1a;根据分数倒序&#xff0c;查询第一个。 const topScore await Score.find().sort({ score: -1 }).skip(0).limit(1);

工作163:eachrt修改

<template><div><el-card><el-card><time-selects GetTime"GetTime"></time-selects><!--第一步 页面--><div id"main" :style"{ width: 1000px, height: 300px }"></div><div id&quo…

Android 使用ViewPager实现view轮播效果,单个item分页样式,多个item分页样式,横向listview

效果 单个item样式 多个item样式 横向item 自定义viewpager——可开关切换动画 public class NoAnimationViewPager extends ViewPager {public NoAnimationViewPager(Context context) {super(context);}public NoAnimationViewPager(Context context, AttributeSet attrs) …

高德地图开发 怎么去除城市信息

主要通过设置features&#xff0c;里面不要填写point&#xff0c;代表标注即可。 mapConfig {zoom: 17,cityName: MapCityName,pitch: 25,viewMode: 3D,features: [bg, road, building]}官方参考文档&#xff1a;https://lbs.amap.com/api/javascript-api/example/personaliz…

工作164:对父和混入的理解

1点击按钮看编辑事件 2点击编辑之后 对当前页面的方法进行调用 3找到子组件下面的混入方法 create下面引入混入 4找到子组件混入下面的混入方法 5找到下面的getlist方法

Minimum supported Gradle version is 4.1. Current version is 4.0.

Android studio 项目无法编译&#xff0c;报错如下&#xff1a; Minimum supported Gradle version is 4.1. Current version is 4.0. Please fix the projects Gradle settings. Gradle settings 解决方法&#xff1a; 项目build.gradle下 classpath com.android.tools.…

ubuntu16.04 安装caffe以及python接口

http://blog.csdn.net/qq_25073253/article/details/72571714http://blog.csdn.net/greed7480/article/details/68486039 首先在你要安装的路径下 clone &#xff1a;git clone https://github.com/BVLC/caffe.git 进入 caffe &#xff0c;将 Makefile.config.example 文件复制…

mongodb $ifNull

$ifNull用于判断第一个表达式是否为 NULL&#xff0c;如果为 NULL 则返回第二个参数的值&#xff0c;如果不为 NULL 则返回第一个参数的值。 $ifNull表达式格式为&#xff1a; { $ifNull: [ <expression>, <replacement-expression-if-null> ] }例子&#xff1a;…

Failed to resolve: android.arch.lifecycle:runtime:1.0.0,Failed to resolve: support-v4

Android studio 导入项目报错&#xff1a; Failed to resolve: com.android.support:support-core-ui:26.1.0 Add Google Maven repository and sync project Open File Show in Project Structure dialog Failed to resolve: android.arch.lifecycle:runtime:1.0.0 Open Fil…

工作165:混入调用的时候

直接created里面定义 不需要在其他位置进行过多操作

Hibernate总结

1.为什么要使用Hibernate开发你的项目呢&#xff1f;Hibernate的开发流程是怎么样的&#xff1f; 为什么要使用①.对JDBC访问数据库的代码做了封装&#xff0c;大大简化了数据访问层繁琐的重复性代码。②.Hibernate 是一个基于JDBC的主流持久化框架&#xff0c;是一个优秀的ORM…

mpvue 中控制swiper滑动,禁止滑动,只允许左滑动,不允许右滑

直接禁止滑动&#xff0c;使用&#xff1a;catchtouchmove参数就OK。 例子&#xff1a; <swiper-item v-for"(item,index) in examList" :key"index" catchtouchmove"false">content</swiper-item>但是我的需求是进行人员测评&…

工作166:错误的处理方式

1这种处理没有数据 2 这样处理勉强调用了接口 但是获取数据还是有问题

07异常处理

1、 【请尝试解释以下奇怪的现象&#xff01;】 int i1, j0, k; ki/j; 代码在运行时会引发异常 上边代码在运行时不会引发异常 浮点数除以0&#xff1a;Infinity 可以使用javap去反汇编两个示例程序的.class文件&#xff08;一个是AboutException.class&#xff0c;另一个是Thr…

java、Android 数组转集合

<array name"title"><item>51巅峰钜惠</item><item>十大星级品牌联盟&#xff0c;全场2折起</item><item>生命不是要超越别人&#xff0c;而是要超越自己。</item><item>己所不欲&#xff0c;勿施于人。——孔子<…

mac instantclient_12_2 安装配置

1、创建一个目录进行文件存放 mkdir oraclecd oracle2、instantclient_12_2文件拷贝到oracle目录下 3、拷贝重要文件到~/lib目录 mkdir ~/libln -s instantclient_12_2/libclntsh.dylib ~/lib/cp instantclient_12_2/{libclntsh.dylib.12.1,libnnz12.dylib,libociei.dylib} …