Android-指纹识别技术(含源码)

今天介绍添加指纹识别技术的几个步骤;;

1.首先添加权限

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
2.设计你的开锁界面,由于不是正式项目,我就捞一次偷笑



3.获取移动设备指纹管理器
FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this);
4.判断移动设备是否支持指纹解锁
fingerprint.isHardwareDetected();

这里返回的一个boolean值,true:支持  false:不支持

5.判断移动设备是否保存过指纹

fingerprint.hasEnrolledFingerprints();

同样这里返回的也是一个boolean值,  true:保存过  false:没保存过

6.开始验证指纹

 fingerprint.authenticate(crypto, flags,cancel,callback,handler)
这里解释一下参数的意思

crypto:可以传null,想要了解的话,可以自行去查看源码

flags:传0

cancel:new   cancellationsignal();

callback:是验证结果和验证状态的回调     ↓  贴上代码,注释很详细,就不解释了;

callback = new FingerprintManagerCompat.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        super.onAuthenticationError(errMsgId, errString);
        //验证错误时,回调该方法。当连续验证5次错误时,将会走onAuthenticationFailed()方法
        hander.obtainMessage(1, errMsgId, 0).sendToTarget();
    }

    @Override
    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
        super.onAuthenticationSucceeded(result);
        //验证成功时,回调该方法。fingerprint对象不能再验证
        hander.obtainMessage(2).sendToTarget();
    }

    @Override
    public void onAuthenticationFailed() {
        super.onAuthenticationFailed();
        //验证失败时,回调该方法。fingerprint对象不能再验证并且需要等待一段时间才能重新创建指纹管理对象进行验证
        hander.obtainMessage(3).sendToTarget();
    }
};

handler:根据回调返回的状态,做出相应的UI更新      ↓   贴上代码,我这里成功的话直接跳到详情界面    

msg.what返回“1”的话,还会有很多种状态,下面会介绍

hander = new Handler(getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 1:   //验证错误
                //todo 界面处理
                handleErrorCode(msg.arg1);
                Log.e(tag, "验证错误");
                break;
            case 2:   //验证成功
                //todo 界面处理
                Log.e(tag, "验证成功");
                Toast.makeText(MainActivity.this, "验证成功", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(MainActivity.this, Bactivity.class));
                break;
            case 3:    //验证失败
                //todo 界面处理
                Log.e(tag, "验证失败");
                Toast.makeText(MainActivity.this, "验证失败···", Toast.LENGTH_SHORT).show();
                break;
        }


    }
};
这里解释一下验证错误跟验证失败的区别:

验证错误:  一切理想状态下(前置条件都通过的话)开始验证指纹,但是不是移动设备本身保存过的指纹。

验证失败:一切理想状态下(前置条件都通过的话)开始验证指纹,每次都不是移动设备本身保存过的指纹,并且次数比较多msg.what才会返回“3”; 小米默认为5次,vivo默认5次。其他机型有兴趣可以自行测试大笑

下面是handleerrorcode方法,注释很清楚。

private void handleErrorCode(int code) {
    switch (code) {
        case FingerprintManager.FINGERPRINT_ERROR_CANCELED:
            //todo 指纹传感器不可用,该操作被取消
            Toast.makeText(this, "验证错误···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE:
            //todo 当前设备不可用,请稍后再试
            Toast.makeText(this, "验证错误···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:
            //todo 由于太多次尝试失败导致被锁,该操作被取消
            Toast.makeText(this, "由于太多次尝试失败导致被锁,该操作被取消···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_NO_SPACE:
            //todo 没有足够的存储空间保存这次操作,该操作不能完成
            Toast.makeText(this, "没有足够的存储空间保存这次操作,该操作不能完成···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
            //todo 操作时间太长,一般为30秒
            Toast.makeText(this, "验证错误···", Toast.LENGTH_SHORT).show();
            break;
        case FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS:
            //todo 传感器不能处理当前指纹图片
            Toast.makeText(this, "验证错误···", Toast.LENGTH_SHORT).show();
            break;
    }
}
7.详情界面用了个类似于跑马灯效果的字体有兴趣的话可以飞一下   Android跑马灯效果链接

然后最后贴上源码希望对大家有所帮助  点击打开链接


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值