指纹前提条件
1. 6.0+
2.手机里至少要有一个已经录入的指纹
引入权限
需要指纹权限:<uses-permissionandroid:name="android.permission.USE_FINGERPRINT"/>
引入依赖
人脸识别可以引入虹软的sdk
关键方法
主要介绍一下FingerprintManager类,提供类三个方法
第一个方法:启动指纹识别
第二个方法:判断手机里面是否有已经有录入的指纹(至少得有一个)
第三个方法:判断手机是否有指纹感应区(硬件支持)
这里需要注意一下,FingerprintManager对象的isHardwareDetected()方法和hasEnrolledFingerprints()方法需要API级别为23及以上,如果你的API级别小于23,那就得加上@TargetApi(23)
创建指纹开启的回调方法
1.FingerPrintManager.AuthenticationCallback:
在验证时传入该接口,通过该接口来返回验证指纹的结果
2.FingerPrintManager.AuthenticationResult:
当指纹验证正确时,接口里返回的参数
3.FingerPrintManager.CryptoObject:
由FingerPrintManager支持的封装加密对象的类
开启指纹识别
我们将指纹识别的CallBack绑定到FingerprintManager中,以获得指纹识别的结果。这就得引入上面图片中FingerprintManager的第一个方法:
public void authenticate(FingerprintManager.CryptoObject crypto,CancellationSignal cancel,int flags,FingerprintManager.AuthenticationCallback callback,Handler handler)
可以看到,这个方法中传递了一个AuthenticationCallback,用于获取指纹识别结果 ,传递了一个CancellationSignal。至此,指纹识别已经开启了。
取消指纹识别
取消指纹识别很简单,authenticate方法中的第二个参数是一个CancellationSignal对象,这个对象就是用来维护取消操作的,这些操作包括取消监听和设定取消回调等。所以,如果要取消,这个参数就不能传Null。
取消指纹识别 mCancellationSignal.cancel();
取消之后会执行的方法是onAuthenticationError()
登录具体流程
1.使用密码登录成功后,去判断设备是否支持指纹/人脸登录,如果支持可以让用户自行选择后续是否需要指纹/人脸登录
2.判断用户指纹/人脸验证是否成功
3.生成加密字符串 可以用sp存储
4.指纹/人脸登录时验证上次加密的字符串
相应的流程图