Android指纹识别API初试

在android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题
 ①在使用FingerPrintManager这个类实现的时候发现了很多问题,这个类里面的一些函数是被hide了的,也就是我们不能调用,比如enroll(),也就是说,当前的官方支持其实是有限的,我们能读取到本机已经存在的指纹(用于解锁的),然后验证这些指纹,但是不能让用户在app使用的时候录入一个指纹,用于app的其他功能,这个是一个缺陷吧目前来说,下面的图也是展示了识别一个可以用来解锁的指纹的功能。
 ②使用FingerPrintManager的时候会遇到要在应用中判断权限的问题,不清楚是因为android M要求的还是api需要,调用的时候也没有反应,既没有功能,也没有提示给予权限,原因有待查证。
 ③在一顿尝试无果之后发现了两个特别的类,一个叫做FingerPrintManagerCompat,这是一个兼容的FingerPrint操作类,还有一个类似的叫做FingerPrintManagerCompatApi23,使用这两个类也能实现到识别指纹的功能,但是也是有局限的,如①所说的。这两个类都能实现这个效果,但是需要API Level 23,如果达不到不会报错,这些类会什么都不做。
展示图,因为没有真机,所以只能用模拟器调试一下,这里也只能用官方的,Genymotion免费版貌似不能模拟指纹:

直接上代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "MainActivity"; private Button check; private FingerprintManagerCompat manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); check = (Button) findViewById(R.id.btn_check); check.setOnClickListener(this); // 获取一个FingerPrintManagerCompat的实例 manager = FingerprintManagerCompat.from(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_check: /** * 开始验证,什么时候停止由系统来确定,如果验证成功,那么系统会关系sensor,如果失败,则允许 * 多次尝试,如果依旧失败,则会拒绝一段时间,然后关闭sensor,过一段时候之后再重新允许尝试 * * 第四个参数为重点,需要传入一个FingerprintManagerCompat.AuthenticationCallback的子类 * 并重写一些方法,不同的情况回调不同的函数 */ manager.authenticate(null, 0, null, new MyCallBack(), null); break; } } public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback { private static final String TAG = "MyCallBack"; // 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息 @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { Log.d(TAG, "onAuthenticationError: " + errString); } // 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作 @Override public void onAuthenticationFailed() { Log.d(TAG, "onAuthenticationFailed: " + "验证失败"); } @Override public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) { Log.d(TAG, "onAuthenticationHelp: " + helpString); } // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor @Override public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) { Log.d(TAG, "onAuthenticationSucceeded: " + "验证成功"); } } }

有朋友提出了问题,这里记录下:
如何让失败或者成功之后Sensor继续保持监听新的指纹?
 答:因为API较新的缘故,这个兼容的Manager类还不能做到自动重启的功能,但是我们可以自己写一个。因为Api中规定了如果回调了Error或者Succeed方法之后,sensor会被关闭,直到下一次重新调用authenticate方法授权,但是我们不能在Error或Succeed直接调用这个方法,因为处于安全性的考虑,不允许开发者短时间内连续授权,经过粗略的测试,android允许我们在30s之后重新打开Sensor授权监听,所以我们要做的,就是通过Handler的sendMessageDelayed方法发送一个延迟的消息,再在Handler中重新调用authenticate方法,具体的代码如下:

private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.d(TAG, "handleMessage: 重启指纹模块"); manager.authenticate(null, 0, null, new MyCallBack(), handler); } }; @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { handler.sendMessageDelayed(new Message(), 1000 * 30); Log.d(TAG, "onAuthenticationError: " + errString); } @Override public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) { handler.sendMessageDelayed(new Message(), 1000 * 30); Log.d(TAG, "onAuthenticationSucceeded: " + "验证成功"); }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-07-31 05:57:59

Android指纹识别API初试的相关文章

Android指纹识别API初试_Android

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

Android指纹识别功能深入浅出分析到实战(6.0以下系统解决方案)_Android

指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统,主要还提供6.0以下设备适配解决方案. 指纹识别用途 大概列举几个指纹识别的用途 系统解锁 应用锁 支付认证 普通的登录认证 指纹识别Google官方文档 官方标准库 Google提供的与指纹识别相关的核心类不多,主类是FingerprintManager,主类依赖三个内部类,如下图所示:  Fin

Android 指纹识别开发实例_Android

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

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

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

源码显示谷歌无情地砍掉 Android 指纹识别功能

在谷歌新旗舰Nexus 6推出之前,一直有传闻表 示,Nexus 6会集成指纹识别功能,但是Android 5.0 ASOP(Android开源计划)源代码显示,在"Moto Shamu"源代码处有一段源代码显示""remove fingerprint support"(去掉指纹支持).Moto Shamu是Nexus 6开发代号.这段源代码显示,Nexus 6原本打算集成指纹识别功能,但是最后被谷歌无情地砍掉. 并且Nexus6不会是最受伤的一款Andr

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="

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

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

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

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

iOS中指纹识别常见问题汇总_IOS

最近公司的 app 要使用指纹支付了;总体来说还是蛮顺利的;但是中间有遇到一些坑;下面就对坑进行汇总; 一.基本知识 点开这个LocalAuthentication.framework,发现里面主要有这么几个东西 LocalAuthentication.framework - LAContext.h - LAError.h - LAPublicDefines.h - LocalAuthentication.h LocalAuthentication.h 这个没什么可讲的吧,代码就两行,一行导入L