利用Android-FingerprintManager类实现指纹识别
安卓指纹识别
利用FingerprintManager主类进行指纹识别。
Github项目地址
在安卓6.0中新增了API,FingerprintManager类,它是Google提供的帮助访问指纹硬件的API类
新增API权限的过程如下
ContextCompact.checkSelfPermission // 检查APP是否拥有某权限
ActivityCompat.requestPermissions() // 如果没有就去申请
onRequestPermissionResult() //异步执行回调结果
ActivityCompat.shouldShowRequestPermissionRationale // 用于给用户解释权限用途
AndroidManifest权限声明
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
FingerprintManager类
三个主要方法
- authenticate(...) 启动指纹识别
- hasEnrolledFingerprints() 判断是否录入有指纹
- isHardwareDetected() 判断是否有硬件支持
实现要点
1 . 判断是否硬件支持
if (!mManager.isHardwareDetected()) {
Toast.makeText(mContext, "没有指纹识别模块", Toast.LENGTH_SHORT).show();
return false;
}
2 . 检查手机是否已录入指纹
if (!mManager.hasEnrolledFingerprints()) {
Toast.makeText(mContext, "没有指纹录入", Toast.LENGTH_SHORT).show();
return false;
}
3 . 创建指纹开启的回调方法
这里就该引入上面所说的FingerprintManager的三个内部类了
①FingerPrintManager.AuthenticationCallback:
在验证时传入该接口,通过该接口来返回验证指纹的结果
②FingerPrintManager.AuthenticationResult:
当指纹验证正确时,接口里返回的参数
③FingerPrintManager.CryptoObject:
由FingerPrintManager支持的封装加密对象的类
只要指纹识别的结果,只需要AuthenticationCallback类即可。
这一步我们就创建AuthenticationCallback类对象。
FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
//多次指纹密码验证错误后,进入此方法;并且,不可再验(短时间)
//errorCode是失败的次数
ToastUtils.show(mContext, "尝试次数过多,请稍后重试", 3000);
}
@Override
public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
//指纹验证失败,可再验,可能手指过脏,或者移动过快等原因。
}
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
//指纹密码验证成功
}
@Override
public void onAuthenticationFailed() {
//指纹验证失败,指纹识别失败,可再验,错误原因为:该指纹不是系统录入的指纹。
}
};
4 . 开启指纹识别
只需要传参即可。
mManager.authenticate(null, mCancellationSignal, 0, mSelfCancelled, null);
扩展小猫粮:
一. authenticate参数说明
/**
* 参数说明:
* FingerprintManager.CryptoObject - 用于通过指纹验证取出AndroidKeyStore中的key的对象,用于加密
* CancellationSignal - 用来取消指纹验证,如果想手动关闭验证,可以调用该参数的cancel方法
* int - 没什么意义,就是传0就好了
* FingerprintManager.AuthenticationCallback - 最重要,由于指纹信息是存在系统硬件中的,app是不可以访问指纹信息的,所以每次验证的时候,系统会通过这个callback告诉你是否验证通过、验证失败等
* Handler - FingerPrint中的消息都通过这个Handler来传递消息,如果你传空,则默认创建一个在主线程上的Handler来传递消息,没什么用,传null好了
*/
public void authenticate(FingerprintManager.CryptoObject crypto, CancellationSignal cancel, int flags, FingerprintManager.AuthenticationCallback callback, Handler handler)
二. 什么是生命?什么是人工智能?
但我们今天不站队,而是从另外一个“诡异”视角,去审视一下什么是生命,什么是人工智能
三. 双重空间,梦境==现实?
想象一下你获得了一种能力——你的梦境是连续的,每天睡着之后,你都会来到一个与现实世界不同、但与前一天的梦境相同的环境中。
利用Android-FingerprintManager类实现指纹识别的更多相关文章
- [ActionScript 3.0] 利用InteractivePNG.as类精确选择识别png图片有像素的区域
用法:如果是把png直接导入flash转换成影片剪辑,只需在影片剪辑属性中勾选为ActionScript导出(x),并把基类里的flash.display.MovieClip替换成Interactiv ...
- Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)
指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...
- Android指纹识别深入浅出分析到实战
指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...
- Android中的指纹识别
转载请注明出处:http://blog.csdn.net/wl9739/article/details/52444671 评论中非常多朋友反映,依据我给出的方案,拿不到指纹信息这个问题,在这里统一说明 ...
- Android开发学习之路-指纹识别api
在android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题 ①在使用FingerPrintManager这个类实现的时候发现了很多问 ...
- Android指纹识别API讲解,让你有更好的用户体验
我发现了一个比较怪的现象.在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝.微信和极少APP支持指纹认证功 ...
- 检查Android是否支持指纹识别以及是否已经录入指纹
原文:检查Android是否支持指纹识别以及是否已经录入指纹 Android M 开始,系统中加入了指纹相关功能. 主要用到的类为:FingerprintManager 只提供三个方法: 返回值 方法 ...
- Android指纹识别
原文:Android指纹识别 上一篇讲了通过FingerprintManager验证手机是否支持指纹识别,以及是否录入了指纹,这里进行指纹的验证. //获取FingerprintManager实例 F ...
- Android 中指纹识别
Android从6.0系统开始就支持指纹认证功能了,指纹功能还需要有硬件支持才行 指纹与手机系统设置的指纹进行匹配 如图: 在LoginActivity 中弹出指纹验证Fragment,验证成功进入M ...
随机推荐
- Netty入门(一):零基础“HelloWorld”详细图文步骤
因为接下来的项目要用到netty,所以就了解一下这个程序,奈何网上的教程都是稍微有点基础的,所以,就写一篇对于netty零基础的,顺便也记录一下. 先扔几个参考学习的网页: netty 官方API: ...
- 栈->栈与递归
文字简述 1.阶乘函数 2.2阶Fiibonacci数列 3.n阶Hanoi塔问题 代码实现 // // Created by lady on 19-4-3. // #include <stdi ...
- python遍历文件(替换)
#!/usr/local/bin/python # -*- coding: UTF-8 -*- #coding:gbk import re import os w_str="" x ...
- react-router@4.0 使用和源码解析
如果你已经是一个正在开发中的react应用,想要引入更好的管理路由功能.那么,react-router是你最好的选择~react-router版本现今已经到4.0.0了,而上一个稳定版本还是2.8.1 ...
- Mysql5.8解压版安装问题:TCP/IP, --shared-memory, or --named-pipe should be configured on NT OS
问题描述: cmd显示如下: .err文件显示: [ERROR] [MY-010131] [Server] TCP/IP, --shared-memory, or --named-pipe shoul ...
- Mybatis+Mysql逆向工程
目录结构: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- 深度学习基础(五)ResNet_Deep Residual Learning for Image Recognition
ResNet可以说是在过去几年中计算机视觉和深度学习领域最具开创性的工作.在其面世以后,目标检测.图像分割等任务中著名的网络模型纷纷借鉴其思想,进一步提升了各自的性能,比如yolo,Inception ...
- vue页面无操作10分钟内调转到登录页面
https://blog.csdn.net/lbPro0412/article/details/83864454 页面在设定时间内无任何操作(鼠标的点击.滑动.路由的切换.是否请求接口等),跳转到登录 ...
- MyBatis基本使用
MyBatis是轻量级的数据库访问API,封装了JDBC操作,可以实现对实体对象的CRUD操作. MyBatis体系结构主要组成部分: 配置文件:SqlMapConfig.xml 主配置文件 ...
- How to use draggable attribute?怎样使用拖拽属性代码分享
6.7 Drag and dropSupport: dragndropChrome for Android NoneChrome 4+iOS Safari 11.0+UC Browser for An ...