android 简单实现指纹识别功能
16lz
2021-01-25
android6.0以后就提供了指纹识别功能,但是由于android手机被各大厂商弄的层次不齐,所以android的指纹识别使用的比较少,但是由于现在老的智能手机被淘汰的差不多了,新手机几乎无一不支持指纹解锁的,所以android也可以搞起指纹识别来了,使使用更方便。
指纹验证的思路大概是这样的:
- 1.设备是否支持指纹识别
- 2.设备是否处于安全保护中(有指纹识别的手机,在使用指纹识别的时候,还需要强制设置密码解锁,如果未设置的话是不许使用指纹识别的)
- 3.设备是否已经注册过指纹(如果用户未使用过这个指纹技术,那么只能提示用户到系统设置里面去设置)
先看一张效果图:
废话不多说直接上代码吧:
要想查看google文档的请点这里
第一步:在AndroidManifest.xml中申明权限:
此权限不需要动态去申请,直接注册就可以;关于哪些权限需要去动态申请可以查看鸿洋大神的这篇博客:
http://blog.csdn.net/lmj623565791/article/details/50709663
第二步:获取指纹管理类:
//这种是使用系统服务,但是必须要在sdk为23以上版本才行// FingerprintManager fingerprintManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE); //这种使用的是v4的兼容包,推荐使用这种 managerCompat = FingerprintManagerCompat.from(MyApplication.appContext);
public boolean checkIsFinger() { //判断当前手机版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// if (ActivityCompat.checkSelfPermission(MyApplication.appContext, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {// ToastUtils.getInstance().showToast("没有指纹识别权限");// return false;// } Log.e(TAG, "有指纹权限"); //判断硬件是否支持指纹识别 if (!managerCompat.isHardwareDetected()) { ToastUtils.getInstance().showToast("没有指纹识别模块"); return false; } Log.e(TAG, "有指纹模块"); //判断 是否开启锁屏密码 if (!keyguardManager.isKeyguardSecure()) { ToastUtils.getInstance().showToast("没有开启锁屏密码"); return false; } //判断是否有指纹录入 if (!managerCompat.hasEnrolledFingerprints()) { ToastUtils.getInstance().showToast("没有录入指纹"); return false; } return true; } else { ToastUtils.getInstance().showToast("设备系统版本太低不支持指纹识别"); return false; } }
/** * 开始识别指纹 * * @param listener */ public void callFingerPrint(final FingerRecognitionCallBack listener) { authentFailedTimes = 0; if (listener != null) listener.onAuthenticationStart(); //开始指纹识别 cancellationSignal = new CancellationSignal(); //必须重新实例化,否则cancel 过一次就不能再使用了 managerCompat.authenticate(null, 0, cancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() { // 验证出错回调 指纹传感器会关闭一段时间,在下次调用authenticate时,会出现禁用期(时间依厂商不同30,1分都有) @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { if (listener != null) listener.onAuthenticationError(errMsgId, errString); } // 验证失败 指纹验证失败后,指纹传感器不会立即关闭指纹验证,系统会提供5次重试的机会,即调用5次onAuthenticationFailed后,才会调用onAuthenticationError @Override public void onAuthenticationFailed() { authentFailedTimes++; if (listener != null) listener.onAuthenticationFailed(authentFailedTimes); } @Override public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {//比如手指移动太快等情况 if (listener != null) listener.onAuthenticationHelp(helpMsgId, helpString); } // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor @Override public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) { if (listener != null) listener.onAuthenticationSucceeded(result); } }, null); }
if (FingerUnlockUtil.init().checkIsFinger()) { final AlertDialog dia = localBuilder.show(); FingerUnlockUtil.init().callFingerPrint(new FingerRecognitionCallBackHelper() { @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { dia.dismiss(); ToastUtils.getInstance().showToast("验证错误===" + String.valueOf(errString)); } @Override public void onAuthenticationFailed(int failedTimes) { ToastUtils.getInstance().showToast("已经验证错误===" + failedTimes + "次"); } @Override public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {//可以不用实现 ToastUtils.getInstance().showToast("验证帮助===" + String.valueOf(helpString)); } @Override public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) { dia.dismiss(); ToastUtils.getInstance().showToast("验证成功==="); } }); }
这里就结束了,是不是很简单呢,可以点击这里下载源码:demo源码
更多相关文章
- Android(安卓)M 动态权限获取
- android 判断摄像头是否可用(6.0以下 )
- Android软件自动更新升级(自动下载安装新版本)
- Android(安卓)N 程序适配要点
- Android系统目录/system/etc下自建文件存在却无法访问
- Android(安卓)6.0+ TelephonyManager 使用示例(3)来电静音和挂断
- pc进入android手机shell的root权限(su: not found)
- Android版本差异适配方案(5.0-9.0)
- android 权限问题分析