栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android11.0(R) 关于指纹&人脸的录入及解锁源码分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android11.0(R) 关于指纹&人脸的录入及解锁源码分析

Android11.0源码关于指纹&人脸的录入及解锁源码分析

1. 指纹录入

指纹录入文件路径:

frameworks/base/core/java/android/hardware/fingerprint/FingerprintManager.java
packages/apps/Settings/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java

指纹录入回调:

private FingerprintManager.EnrollmentCallback mEnrollmentCallback
            = new FingerprintManager.EnrollmentCallback() { 
					
		@Override
        public void onEnrollmentProgress(int remaining) {
		   //指纹录入过程,remaining值从24(和对应指纹厂商有关)到0每次都会触发
		   // if (remaining == 0) {代表指纹录入结果成功}
           FingerprintEnrollSidecar.super.onEnrollmentProgress(remaining);
        }
		
        @Override
        public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
	        //指纹模板录入异常提示,helpMsgId:异常码,helpString:异常提示
            FingerprintEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString);
        }
        
		
        @Override
        public void onEnrollmentError(int errMsgId, CharSequence errString) {
		    //指纹录入结果失败,errMsgId:失败错误码,errString:失败错误原因
            FingerprintEnrollSidecar.super.onEnrollmentError(errMsgId, errString);
        }
   };

**

2. 人脸录入

**
人脸录入文件路径:

frameworks/base/core/java/android/hardware/face/FaceManager.java
packages/apps/Settings/src/com/android/settings/biometrics/face/FaceEnrollSidecar.java

人脸录入回调:

 private FaceManager.EnrollmentCallback mEnrollmentCallback
            = new FaceManager.EnrollmentCallback() {	
			
		
        @Override
        public void onEnrollmentProgress(int remaining) {
		    //人脸录入过程,remaining值从100(和对应人脸厂商有关)到0每次都会触发
		    //if (remaining == 0) {代表人脸录入结果成功}
            FaceEnrollSidecar.super.onEnrollmentProgress(remaining);
        }

        @Override
        public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
		   //人脸录入异常提示,helpMsgId:异常码,helpString:异常提示
            FaceEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString);
        }

        @Override
        public void onEnrollmentError(int errMsgId, CharSequence errString) {
		    //人脸录入结果失败,errMsgId:失败错误码,errString:失败错误原因
            FaceEnrollSidecar.super.onEnrollmentError(errMsgId, errString);
        }
    };

3. 指纹解锁

指纹解锁注入回调文件路径:

frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
private FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback
        = new AuthenticationCallback() {
		
    @Override
    public void onAuthenticationFailed() {
        handleFingerprintAuthFailed();
    }

		
    @Override
    public void onAuthenticationSucceeded(AuthenticationResult result) {
        Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded");
        handleFingerprintAuthenticated(result.getUserId(), result.isStrongBiometric());
        Trace.endSection();
    }
	
		
    @Override
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
	    //if(helpMsgId == 1008){指纹解锁误触}
        handleFingerprintHelp(helpMsgId, helpString.toString());
    }

		
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        handleFingerprintError(errMsgId, errString.toString());
    }

		
    @Override
    public void onAuthenticationAcquired(int acquireInfo) {
        handleFingerprintAcquired(acquireInfo);
    }
};

4. 人脸解锁
人脸解锁注入回调文件路经:

frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
FaceManager.AuthenticationCallback mFaceAuthenticationCallback
        = new FaceManager.AuthenticationCallback() {

		
    @Override
    public void onAuthenticationFailed() {
        handleFaceAuthFailed();
    }

		
    @Override
    public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) {
        Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded");
        handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric());
        Trace.endSection();
    }

		
   @Override
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
        handleFaceHelp(helpMsgId, helpString.toString());
    }

		
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
	if (errMsgId > 1000) {
        //触发获取人脸识别结果失败
		//触发获取人脸识别结果失败原因
		}
        handleFaceError(errMsgId, errString.toString());
    }

		
    @Override
    public void onAuthenticationAcquired(int acquireInfo) {
        handleFaceAcquired(acquireInfo);
    }
};

5.指纹管理
文件路径:

frameworks/base/core/java/android/hardware/fingerprint/FingerprintManager.java
910    private void sendAcquiredResult(long deviceId, int acquireInfo, int vendorCode) {
911        if (mAuthenticationCallback != null) {
912            mAuthenticationCallback.onAuthenticationAcquired(acquireInfo);
913        }
          //指纹录入或解锁,msg为过程中异常提示信息
914        final String msg = getAcquiredString(mContext, acquireInfo, vendorCode);
915        if (msg == null) {
916            return;
917        }
918        // emulate HAL 2.1 behavior and send real acquiredInfo
           //指纹录入或解锁,clientInfo为过程中异常提示对应的异常码
919        final int clientInfo = acquireInfo == FINGERPRINT_ACQUIRED_VENDOR
920                ? (vendorCode + FINGERPRINT_ACQUIRED_VENDOR_base) : acquireInfo;
921        if (mEnrollmentCallback != null) {
922            mEnrollmentCallback.onEnrollmentHelp(clientInfo, msg);
923        } else if (mAuthenticationCallback != null) {
924            if (acquireInfo != BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START) {
925                mAuthenticationCallback.onAuthenticationHelp(clientInfo, msg);
926            }
927        }
928    }
930    private void sendErrorResult(long deviceId, int errMsgId, int vendorCode) {
931        // emulate HAL 2.1 behavior and send real errMsgId
           //指纹录入或解锁,clientErrMsgId为结果失败信息错误码
932        final int clientErrMsgId = errMsgId == FINGERPRINT_ERROR_VENDOR
933                ? (vendorCode + FINGERPRINT_ERROR_VENDOR_base) : errMsgId;
934        if (mEnrollmentCallback != null) {
935            mEnrollmentCallback.onEnrollmentError(clientErrMsgId,
936                    getErrorString(mContext, errMsgId, vendorCode));
937        } else if (mAuthenticationCallback != null) {
938            mAuthenticationCallback.onAuthenticationError(clientErrMsgId,
939                    getErrorString(mContext, errMsgId, vendorCode));
940        } else if (mRemovalCallback != null) {
941            mRemovalCallback.onRemovalError(mRemovalFingerprint, clientErrMsgId,
942                    getErrorString(mContext, errMsgId, vendorCode));
943        } else if (mEnumerateCallback != null) {
944            mEnumerateCallback.onEnumerateError(clientErrMsgId,
945                    getErrorString(mContext, errMsgId, vendorCode));
946        }
947    }

6.人脸管理
文件路径:

frameworks/base/core/java/android/hardware/face/FaceManager.java
1077    private void sendAcquiredResult(long deviceId, int acquireInfo, int vendorCode) {
1078        if (mAuthenticationCallback != null) {
1079            mAuthenticationCallback.onAuthenticationAcquired(acquireInfo);
1080        }
           //人脸录入或解锁,msg为过程中异常提示信息
1081        final String msg = getAcquiredString(mContext, acquireInfo, vendorCode);
           //人脸录入或解锁,clientInfo为过程中异常提示对应的异常码
1082        final int clientInfo = acquireInfo == FACE_ACQUIRED_VENDOR
1083                ? (vendorCode + FACE_ACQUIRED_VENDOR_base) : acquireInfo;
1084        if (mEnrollmentCallback != null) {
1085            mEnrollmentCallback.onEnrollmentHelp(clientInfo, msg);
1086        } else if (mAuthenticationCallback != null && msg != null) {
1087            mAuthenticationCallback.onAuthenticationHelp(clientInfo, msg);
1088        }
1089    }
1041    private void sendErrorResult(long deviceId, int errMsgId, int vendorCode) {
1042        // emulate HAL 2.1 behavior and send real errMsgId
            //人脸录入或解锁,clientErrMsgId为结果失败信息错误码
1043        final int clientErrMsgId = errMsgId == FACE_ERROR_VENDOR
1044                ? (vendorCode + FACE_ERROR_VENDOR_base) : errMsgId;
1045        if (mEnrollmentCallback != null) {
1046            mEnrollmentCallback.onEnrollmentError(clientErrMsgId,
1047                    getErrorString(mContext, errMsgId, vendorCode));
1048        } else if (mAuthenticationCallback != null) {
1049            mAuthenticationCallback.onAuthenticationError(clientErrMsgId,
1050                    getErrorString(mContext, errMsgId, vendorCode));
1051        } else if (mRemovalCallback != null) {
1052            mRemovalCallback.onRemovalError(mRemovalFace, clientErrMsgId,
1053                    getErrorString(mContext, errMsgId, vendorCode));
1054        }
1055    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299322.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号