Android指纹识别

Android指纹识别

最近在工作中需要用到指纹识别,正好之前在android开发技术周报中看见一篇关于锁屏的文章,作者写的非常好,每个知识点都有详细的讲解,其中就包括指纹解锁,所以就拿来用用。末尾会附上链接。

准备工作

首先如果想使用android指纹识别,编译环境得是6.0的SDK并且拥有一个具有指纹识别的手机,如果没有也可以下一android模拟器,当然api得是23的这样在额外功能里面也可以使用指纹识别功能。

具体代码实现

首先需要了解的就是当前手机是否具有指纹识别功能,其次再判断指纹是否正确。

 public boolean isFingerprintAuthAvailable() {
    //判断当前手机版本
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    //获得密码管理器
        mKeyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
        //判断是否具有锁屏密码
        if (!mKeyguardManager.isKeyguardSecure()) {
            return false;
        }
        //判断APP是否具有指纹识别权限
        if (checkSelfPermission(Manifest.permission.USE_FINGERPRINT) == PackageManager.PERMISSION_GRANTED) {
        //获得指纹识别管理器对象
            manager = (FingerprintManager) getSystemService(Activity.FINGERPRINT_SERVICE);
            mCancellationSignal = new CancellationSignal();
        //判断是否具有指纹识别的硬件设施和是否已经录好指纹
            return manager.isHardwareDetected() && manager.hasEnrolledFingerprints();
        }else{
            return false;
        }
    }else{
        return false;
    }
}

代码上都有注释,基本都能看懂,checkSelfPermission()是ContextWrapper的方法,可以直接调用,这样在判断好是否有指纹识别功能之后。接下来就是验证指纹了。

 private void startFingerPrintListener() {
    if (!isFingerprintAuthAvailable()) {
        tv.setText("您的手机暂不支持指纹识别");
        return;
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(Manifest.permission.USE_FINGERPRINT) == PackageManager.PERMISSION_GRANTED) {
        //主要方法:指纹验证
                manager.authenticate(null,mCancellationSignal,0,new MyCallBack(),null);
                return;
            }
        }
    }
}

其中最主要的方法就是authenticate()方法,需要五个参数。

其中,crypto参数代表Android6.0中crypto objects的wrapper class,可以通过该对象使authenticate过程更加安全,也可以不使用,这里我们将其设为null;cancel用来取消anthenticate(),我们new出一个对象传入就可以;flags是标志位,设置为0;callback为指纹识别回调,包含指纹识别的核心方法:onAuthenticationError()是指纹匹配连续失败后的回调(几十秒后才能继续匹配),onAuthenticationSucceeded()是指纹匹配成功的回调,onAuthenticationFailed()是指纹匹配失败时的回调。我们在这几个方法中做相应的处理即可。

引用自 腾讯Bugly(http://bugly.qq.com)

接下来就看一下回调都有什么。

public class MyCallBack extends FingerprintManager.AuthenticationCallback{
    private static final String TAG="MyCallBack";

    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        // TODO Auto-generated method stub
        Log.d(TAG, "onAuthenticationError: " + errString);
        tv.setText("出现错误");
    }
    @Override
    public void onAuthenticationFailed() {
        // TODO Auto-generated method stub
        Log.d(TAG, "onAuthenticationFailed: " + "校验失败");
        tv.setText("校验失败");
    }
    @Override
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
        Log.d(TAG, "onAuthenticationHelp: " + helpString);
    }

    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        Log.d(TAG, "onAuthenticationSucceeded: " + "校验成功");
        tv.setText("校验成功");
    }
}

一共有四个回调方法,看方法名就可以很好的理解了。到这里,指纹识别就基本结束了,其实听起来好高大上,写起来也不是很难,当然这收拾踩在巨人的肩上,非常感谢那些无私奉献的知识大神们,追随他们的脚步,我们可以走的更远。

参考资料:https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653577446&idx=2&sn=940cfe45f8da91277d1046d90368d440&scene=0&key=77421cf58af4a6535ed6c7ac8e7dba3f41c5c30ca4325df77a661236aeec02214fd7a46f60e86b57d64c152ce8ca8fcb&ascene=0&uin=MTYzMjY2MTE1&devicetype=iMac+MacBookPro10%2C1+OSX+OSX+10.11.5+build(15F34)&version=11020201&pass_ticket=VuyS87WzF3UVtKIwIRxv%2Fl4lnLMKvTKRPv5P5Drl95g%3D

你可能感兴趣的:(android,指纹识别)