安卓指纹识别

利用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类

三个主要方法

  1. authenticate(...) 启动指纹识别
  2. hasEnrolledFingerprints() 判断是否录入有指纹
  3. 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类实现指纹识别的更多相关文章

  1. [ActionScript 3.0] 利用InteractivePNG.as类精确选择识别png图片有像素的区域

    用法:如果是把png直接导入flash转换成影片剪辑,只需在影片剪辑属性中勾选为ActionScript导出(x),并把基类里的flash.display.MovieClip替换成Interactiv ...

  2. Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

    指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...

  3. Android指纹识别深入浅出分析到实战

    指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...

  4. Android中的指纹识别

    转载请注明出处:http://blog.csdn.net/wl9739/article/details/52444671 评论中非常多朋友反映,依据我给出的方案,拿不到指纹信息这个问题,在这里统一说明 ...

  5. Android开发学习之路-指纹识别api

    在android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题 ①在使用FingerPrintManager这个类实现的时候发现了很多问 ...

  6. Android指纹识别API讲解,让你有更好的用户体验

    我发现了一个比较怪的现象.在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝.微信和极少APP支持指纹认证功 ...

  7. 检查Android是否支持指纹识别以及是否已经录入指纹

    原文:检查Android是否支持指纹识别以及是否已经录入指纹 Android M 开始,系统中加入了指纹相关功能. 主要用到的类为:FingerprintManager 只提供三个方法: 返回值 方法 ...

  8. Android指纹识别

    原文:Android指纹识别 上一篇讲了通过FingerprintManager验证手机是否支持指纹识别,以及是否录入了指纹,这里进行指纹的验证. //获取FingerprintManager实例 F ...

  9. Android 中指纹识别

    Android从6.0系统开始就支持指纹认证功能了,指纹功能还需要有硬件支持才行 指纹与手机系统设置的指纹进行匹配 如图: 在LoginActivity 中弹出指纹验证Fragment,验证成功进入M ...

随机推荐

  1. Nginx负载均衡后端健康检查(支持HTTP和TCP)

    之前有一篇文章记录nginx负载均衡后端检查,链接为 https://www.cnblogs.com/minseo/p/9511456.html 但是只包含http健康检查不包含tcp下面安装ngin ...

  2. 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good

    最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...

  3. LG1484 种树

    题意 \(N\)个数,至多选\(k\)个,相邻两数不能同时选,问最大价值. 思路 一种假的思路:直接扔进对里面,每次都选最大的可以选的,再把两边和自己标记为不能选,一直贪心下去.是不是很有道理? 假在 ...

  4. Redis的持久化之RDB方式

    RDB方式 Redis是默认支持的 优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件) 劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的.也就是积攒 ...

  5. VS Code mac版全局搜索失效最简单解法

    网上百度到的一些说法,说是添加以下命令行 "search.exclude": { "system/": true, "!/system/**/*.ps ...

  6. Angular7上手体验

    准备工具 Node.js Angular requires Node.js version 8.x or 10.x. 查看当前你的node版本可以在CMD中输入 node -v npm -v 开发工具 ...

  7. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  8. Python3.0科学计算学习之绘图(二)

    (1) np.mashgrid()函数:-----生成网络点坐标矩阵,可以是二维网络矩阵,也可以是三维网络矩阵.其中,每个交叉点就是网络点,描述这些网络点的矩阵就是坐标矩阵(横坐标矩阵X中的每个元素与 ...

  9. Centos7安装net Core

    官方文档:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install 我这里是物理机,不是虚拟机 第一步: sudo ...

  10. matlab多个曲面如何画在一个坐标系中的疑问

    matlab多个曲面如何画在一个坐标系中的疑问 [复制链接] [X,Y]=meshgrid(-3:0.1:3);Z=X.^2+Y.^2;mesh(X,Y,-Z)hold onmesh(X,Y,Z)