Android 设备指纹

  • 使用FingerprintManagerCompat
  • 使用FingerprintManager

FingerprintManagerCompat

官方推荐该方法:

1.获取管理类
FingerprintManagerCompat mManager =FingerprintManagerCompat.from(this);

//确认指纹是否存在,是否有这个功能
boolean isHard=mManager.isHardwareDetected();

//检查是否至少有一个指纹注册
boolean hasFringer=mManager.hasEnrolledFingerprints();
//有至少一个指纹注册
if(hasFringer == true){
Toast.makeText(getApplicationContext(), “请按下手指,进行指纹校验”, Toast.LENGTH_SHORT).show();

2.注册回调
/**
* 开始验证,什么时候停止由系统来确定,如果验证成功,那么系统会关系sensor,如果失败,则允许
* 多次尝试,如果依旧失败,则会拒绝一段时间,然后关闭sensor,过一段时候之后再重新允许尝试
*
* 第四个参数为重点,需要传入一个FingerprintManagerCompat.AuthenticationCallback的子类
* 并重写一些方法,不同的情况回调不同的函数
*/
mManager.authenticate(null, 0, null, new MyCallBack(), null);
} else {
//有指纹功能,没有设置指纹
。。。。
}

3.回调类
public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback {
private static final String TAG = “MyCallBack”;

    // 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息    @Override    public void onAuthenticationError(int errMsgId, CharSequence errString) {        Log.e(TAG, "onAuthenticationError: " + errString);        Log.i("dxj", "errMsgId=" + errMsgId);        //5 用户没有在设备上面录入指纹        if (errMsgId == 5) {            Toast.makeText(getApplicationContext(), "onAuthenticationError: " + errString + "请录入指纹", Toast.LENGTH_LONG).show();        }    }    // 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作    @Override    public void onAuthenticationFailed() {        Log.e(TAG, "onAuthenticationFailed: " + "验证失败");        Toast.makeText(getApplicationContext(), "onAuthenticationFailed: " + "验证失败", Toast.LENGTH_LONG).show();    }    @Override    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {        Log.e(TAG, "onAuthenticationHelp: " + helpString);        Toast.makeText(getApplicationContext(), "onAuthenticationHelp: " + helpString, Toast.LENGTH_LONG).show();    }    // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor    @Override    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult                                                  result) {        Log.e(TAG, "onAuthenticationSucceeded: " + "验证成功");        Toast.makeText(getApplicationContext(), "onAuthenticationSucceeded: " + "验证成功", Toast.LENGTH_LONG).show();    }}

FingerprintManager

版本判断:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { …. }

1.获取管理类
FingerprintManager mFingerprintManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);

if (!(mFingerprintManager == null)) {

hasFingerprintManagerFinger = mFingerprintManager.isHardwareDetected();harDwareFingerprintManagerDetected = mFingerprintManager.hasEnrolledFingerprints();}

2.回调校验
mFingerprintManager.authenticate(null, null, 0, new MyCallBackB(), null);

3.回调类
public class MyCallBackB extends FingerprintManager.AuthenticationCallback {

    // 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息    @Override    public void onAuthenticationError(int errMsgId, CharSequence errString) {        LogUtils.e("  MyCallBackB onAuthenticationError= " + errMsgId);        //7 用户没有在设备上面录入指纹        switch (errMsgId) {            case 1:                Toast.makeText(getApplicationContext(), "onAuthenticationError: " + errString + "请录入指纹", Toast.LENGTH_LONG).show();                break;            case 7:                Toast.makeText(getApplicationContext(), "onAuthenticationError: " + errString + "请录入指纹", Toast.LENGTH_LONG).show();                break;        }    }    // 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作    @Override    public void onAuthenticationFailed() {    }    @Override    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {        Toast.makeText(getApplicationContext(), "onAuthenticationHelp: " + helpString, Toast.LENGTH_LONG).show();    }    // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor    @Override    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {    }}

注意:

最好进行类的判断:为什么呢?正常指纹5.1即支持,然而,我们国产某些手机5.1.1任然木有这个类,所以导致直接类找不到异常,奔溃了。露珠已经遇到锤子某机型的坑,app无法打开。。。
try {

       Class.forName("android.hardware.fingerprint.FingerprintManager");        mFingerprintManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);    } catch (ClassNotFoundException e) {        e.printStackTrace();}

提示:

检查一个手机是否支持指纹设备,先进行设备版本判断,如果大于21,即开始进行下方代码,检测指纹。最好这两个类合用,前者是google推荐,据说是做了很多兼容的,然而,我们的国产手机太NB,支持指纹用第一个类依然无法检测,第二类就能检测出来。当然,更加建议在用的时候用上方注意里面的方式,先查看是否有这个类。

更多相关文章

  1. Android(安卓)设备指纹
  2. android sdk更新失败解决办法
  3. EditText 文字验证
  4. Android(安卓)SDK下载和更新失败的解决方法
  5. Android(安卓)SDK三种更新失败及其解决办法
  6. Android客户端与Tomcat服务器通信实现登录验证
  7. Android下实现手机验证码
  8. Android(安卓)Studio启动安卓虚拟机失败,附Android(安卓)Studio安
  9. Android(安卓)SDK下载和更新失败的解决方法

随机推荐

  1. Android待机状态更新
  2. Android(安卓)通过系统使用NotificationL
  3. Android(安卓)opencore编译问题总结
  4. Android(安卓)自定义Toast显示图片
  5. android之应用程序LED
  6. Android(安卓)2.0新增类ExifInterface使
  7. 利用UltimateAndroid快速开发(一):配置篇
  8. Android学习 之 活动与任务
  9. 一个RecyclerView列表显示多种类型的Item
  10. android程序界面自动适应屏幕分辨率例子