指纹录入和指纹解锁流程

粗略了解下指纹的录入和解锁流程, 记录如下
Android P

Finger Enroll:
    1.Settings
        FingerprintEnrollIntroduction
        FingerprintEnrollFindSensor
        FingerprintEnrollEnrolling
            FingerprintEnrollSidecar(Fragment)
                ->onStart
                    ->startEnrollment()
                        // FingerprintManager
    2.framework/base/core
                        ->mFingerprintManager.enroll(mToken, mEnrollmentCancel,mFingerprintIndex /* flags */, mUserId, mEnrollmentCallback);
                             // FingerprintService  
                             ->mService.enroll(mToken, token, userId, mServiceReceiver, flags,mContext.getOpPackageName());
                                ->startEnrollment(token, cryptoToken, userId, receiver, flags,restricted, opPackageName);
                                    ->FingerprintService.this.getFingerprintDaemon();
                                        ->mHalDeviceId = mDaemon.setNotify(mDaemonCallback);
                                            ->handleEnrollResult(deviceId, fingerId, groupId, remaining);
                                                // EnrollClient
                                                ->client.onEnrollResult(fingerId, groupId, remaining)
                                                    ->FingerprintUtils.getInstance().addFingerprintForUser(getContext(), fingerId,getTargetUserId(), mIndex);
                                                        ->getStateForUser(ctx, userId).addFingerprintWithIndex(fingerId, userId, index);
                                                            // FingerprintsUserState
                                                            ->scheduleWriteStateLocked();
                                                                ->doWriteState()
                                                                    // new File(Environment.getUserSystemDirectory(userId), FINGERPRINT_FILE);
                                                                    // settings_fingerprint.xml

Finger Authentication:
    // FingerprintService
        handleAuthenticated(deviceId, fingerId, groupId, token);
            client.onAuthenticated(fingerId, groupId)
                // AuthenticationClient
                    (IFingerprintServiceReceiver) receiver.onAuthenticationSucceeded(getHalDeviceId(), fp, getTargetUserId());
                        // FingerprintManager
                            mHandler.obtainMessage(MSG_AUTHENTICATION_SUCCEEDED, userId, 0, fp).sendToTarget();
                                mAuthenticationCallback.onAuthenticationSucceeded(result);
                                    // KeyguardUpdateMonitor
                                         handleFingerprintAuthenticated(result.getUserId());

Android Q

// Authentation Finger Schedule: (close Screen, Authentation with finger(Success))
        // PhoneWindowManager
        mKeyguardDelegate.onStartedGoingToSleep(why);
        // KeyguardServiceDelegate
        mKeyguardService.onStartedGoingToSleep(why);
        // KeyguardServiceWrapper
        mService.onStartedGoingToSleep(reason);
        // KeyguardService
        mKeyguardViewMediator.onStartedGoingToSleep(reason);
        // KeyguardViewMediator
        KeyguardUpdateMonitor.getInstance(mContext).dispatchStartedGoingToSleep(why);
        // KeyguardUpdateMonitor#
        handleStartedGoingToSleep(msg.arg1);
        updateBiometricListeningState();
        updateFingerprintListeningState()
        startListeningForFingerprint()
        mFpm.authenticate(null, mFingerprintCancelSignal, 0, mFingerprintAuthenticationCallback,null, userId);
            // FingerprintManager
            -> authenticate(
                -> (IFingerprintService)mService.authenticate(mToken, sessionId, userId, mServiceReceiver, flags,mContext.getOpPackageName());
                -> // FingerprintService# private final class FingerprintServiceWrapper extends IFingerprintService.Stub {
                    -> public void authenticate(final IBinder token, final long opId, final int groupId,
                          -> authenticateInternal(
                                -> startAuthentication(
                                       startClient(client, true /* initiatedByClient */);
                                           // AuthenticationClient#start()
                                           final int result = getDaemonWrapper().authenticate(mOpId, getGroupId());
                                               BiometricServiceBase#protected interface DaemonWrapper { -> int authenticate(long operationId, int groupId) throws RemoteException;
                                                   IBiometricsFingerprint daemon = getFingerprintDaemon();
                                                       IBiometricsFingerprint daemon = getFingerprintDaemon();
                                                           mHalDeviceId = mDaemon.setNotify(mDaemonCallback);
                                                               public void onAuthenticated(final long deviceId, final int fingerId, final int groupId,
                                                                   FingerprintService.super.handleAuthenticated(fp, token);
                                                                       client.onAuthenticated(identifier, authenticated, token)
                                                                       // AuthenticationClient#
                                                                           (BiometricServiceBase.ServiceListener)listener.onAuthenticationSucceeded(getHalDeviceId(), identifier, getTargetUserId());
                                                                           Or: listener.onAuthenticationFailed(getHalDeviceId());
                                                                               // FingerprintService#
                                                                               mFingerprintServiceReceiver.onAuthenticationSucceeded(deviceId, (Fingerprint) biometric, userId);
                                                                                   //FingerprintManager#
                                                                                   mHandler.obtainMessage(MSG_AUTHENTICATION_SUCCEEDED, userId, 0, fp).sendToTarget();
                                                                                       sendAuthenticatedSucceeded((Fingerprint) msg.obj, msg.arg1 /* userId */);
                                                                                           mAuthenticationCallback.onAuthenticationSucceeded(result);
                                                                                               // KeyguardUpdateMonitor
                                                                                               handleFingerprintAuthenticated(result.getUserId());

// Enroll finger Schedule:
    // package/apps/Settings
    // FingerprintEnrollIntroduction extends BiometricEnrollIntroduction
    onNextButtonClick( # launchNextEnrollingActivity(mToken);
        // FingerprintEnrollFindSensor#
        startLookingForFingerprint()
           // FingerprintEnrollEnrolling extens BiometricsEnrollEnrolling
           startEnrollment() # mSidecar.setListener(this);
               // BiometricEnrollSidecar#onStart()
               startEnrollment()
               // FingerprintEnrollSidecar
                   startEnrollment()
                       // FingerprintManager
                       mFingerprintManager.enroll(mToken, mEnrollmentCancel,0 /* flags */, mUserId, mEnrollmentCallback);
                           // FingerprintService
                           enroll(final IBinder token, final byte[] cryptoToken, final int userId,
                               enrollInternal(
                                   startClient(client, true /* initiatedByClient */);
                                        startCurrentClient(mCurrentClient.getCookie());
                                            mCurrentClient.start();
                                            // EnrollClient
                                            final int result = getDaemonWrapper().enroll(mCryptoToken, getGroupId(), timeout,disabledFeatures);
                                                // FingerprintService
                                                IBiometricsFingerprint daemon = getFingerprintDaemon();
                                                    public void onEnrollResult(final long deviceId, final int fingerId, final int groupId,
                                                        FingerprintService.super.handleEnrollResult(fingerprint, remaining);
                                                            client.onEnrollResult(identifier, remaining)
                                                                // EnrollClient
                                                                mBiometricUtils.addBiometricForUser(getContext(), getTargetUserId(), identifier);
                                                                    // FingerprintUtils
                                                                    getStateForUser(context, userId).addBiometric(identifier);
                                                                    // FingerprintUserState
                                                                    super.addBiometric(identifier);
                                                                    // BiometricUserState
                                                                    scheduleWriteStateLocked()
                                                                    // FingerprintUserState
                                                                        doWriteState()
                                                                        destination.finishWrite(out);
                                                                        File(Environment.getUserSystemDirectory(userId), getBiometricFile());

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值