菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
182
0

Android Q 指纹解锁流程

原创
05/13 14:22
阅读数 21737

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());

发表评论

0/200
182 点赞
0 评论
收藏
为你推荐 换一批