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 sdk更新失败解决办法
  2. EditText 文字验证
  3. Android(安卓)SDK下载和更新失败的解决方法
  4. Android(安卓)SDK三种更新失败及其解决办法
  5. Android客户端与Tomcat服务器通信实现登录验证
  6. Android下实现手机验证码
  7. Android(安卓)Studio启动安卓虚拟机失败,附Android(安卓)Studio安
  8. Android(安卓)SDK下载和更新失败的解决方法
  9. #Android(安卓)获取(keystore)Maps API Key

随机推荐

  1. 读取 android 设备的电池信息
  2. Android(安卓)Layout XML属性
  3. Android(安卓)FrameWork——Touch事件派
  4. Android中级联列表ExpandableListView使
  5. 【Android-View】基于原生View的简单功能
  6. Activity切换动画无效(android:windowIsT
  7. 史上最全谷歌Android开发工具Android(安
  8. android 之使用任意XML资源文件
  9. [Android]后台Service 弹出自定义dialog
  10. 解决Error inflating class android.supp