Android - 指纹识别API示例

本文详细介绍了在Android应用中实现指纹识别的流程,包括在清单文件声明权限,判断设备是否支持和满足认证条件,以及针对Android 9.0以下和以上的不同版本调用相应的指纹管理类。内容涵盖了从创建自定义对话框到处理认证事件的全过程。
摘要由CSDN通过智能技术生成

– 前言

需求说明:app经常要验证码验证用户手机号保证安全性,现在想接入指纹识别来代替验证码验证,不支持指纹识别的设备照常用验证码。

了解API

Android在23(Android M 6.0)新增了对指纹识别的硬件支持,应用可以通过调用系统Api实现指纹验证相关功能,相对于传统的手势,密码等验证方式,指纹验证安全性更高,速度也更快。

  • Android 23(Android M 6.0)新增 指纹识别Api:FingerprintManager,开发者通过该Api打开指纹认证时,系统仅会打开设备的指纹模块监听,并不会有UI相关展示,需要开发者根据自身App要求弹出对应的交互流程。
  • Android 28(Android P 9.0)新增 生物识别Api:BiometricManager,推荐替换掉原来的FM,囊括指纹、人脸、虹膜等生物特征识别,不过现阶段只开放了指纹相关。开发者使用该Api进行指纹认证时,系统在会打开设备的指纹模块监听的同时,还会弹出一个系统级的Dialog提示用户正在进行指纹解锁流程。

Goolge提供的API只是指纹跟设备中的指纹库进行比对,得到验证的状态(成功/失败…),无法得到唯一的指纹信息,也就无法绑定账户。 前端提供一个开关,当用户开启指纹后,将状态保存在本地,但每次指纹识别前都要判断满足要求才能正常走流程。


– 认证流程

第零步:在清单文件中申明权限
<!-- 使用生物特征识别、触摸传感器和指纹认证的许可-->
    <uses-permission android:name="android.permission.USE_BIOMETRIC" />
    <uses-permission android:name="android.permission.USE_FINGERPRINT"/>

第一步:判断设备满足认证的前提要求(四步)

  1. Android6.0及以上版本
  2. 判断硬件支持指纹识别
  3. 判断已设置密码锁
  4. 判断至少注册了一个指纹
/**
* 1.>Android 6.0 & 2.支持指纹识别 & 3.已设置开屏密码 & 4.已录入指纹
*/
private boolean isSupportFingerprint(){
   
		if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
   
            Toast.makeText(mContext, "系统版本过低,不支持指纹功能", Toast.LENGTH_SHORT).show();
            return false;
        } else {
   
            KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class);
            fingerprintManager = (FingerprintManager)getSystemService(FINGERPRINT_SERVICE);
            if (fingerprintManager == null || !fingerprintManager.isHardwareDetected()) {
   
                Toast.makeText(mContext, "您的系统不支持指纹功能", Toast.LENGTH_SHORT).show();
                return false;
            } else if (keyguardManager != null && !keyguardManager.isKeyguardSecure()) {
   
                Toast.makeText(mContext, "请在设置界面开启锁屏密码,并录入指纹后再尝试", Toast.LENGTH_LONG).show();
                return false;
            } else if (!fingerprintManager.hasEnrolledFingerprints()) {
   
            	
                Toast.makeText(mContext, "您还没有录入指纹, 请在系统设置录入至少一个指纹", Toast.LENGTH_LONG).show();
                return false;
            }
            return true;
        }

第二步:两种设备调用不同的指纹管理类

判断版本在9.0以上还是以下,以上用FingerprintManager类进行指纹识别,并自定义监听时的Dialog,以下用BiometricManager类进行指纹识别,自动调用系统Dialog。

1.两种流程
private void selectMode(String num){
   
	if(isSupportFingerprint()){
   
		//9.0以上
		if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
   
	        overallIdentification();
	    }else {
   
	    	//6.0~9.0 自定义的Dialog和回调接口
	    	FingerprintDialogFragment dialogFragment = new FingerprintDialogFragment();
	    	dialogFragment.setArguments(bundle);
	    	dialogFragment.showNow(getSupportFragmentManager(),"FingerprintDialogFragment");
	    	dialo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值