Analyse du processus du module d'empreintes digitales (2) Processus d'initialisation du cadre d'empreintes digitales

Deuxièmement, le processus d'initialisation du cadre d'empreintes digitales

Lorsque le système est allumé, divers services démarrent, notamment FingerprintService. Il peut être vu à partir du journal de démarrage (sys_log.boot) dans la figure suivante:

05-29 10: 37: 57.870869 1127 1127 I SystemServiceManager: Démarrage de com.android.server.dreams.DreamManagerService

05-29 10: 37: 57.874643 1127 1127 Dans SystemServer: StartAssetAtlasService

05-29 10: 37: 57.883240 1127 1127 I SystemServiceManager: Démarrage de com.android.server.print.PrintManagerService

05-29 10: 37: 57.910104 1127 1127 I SystemServiceManager: Démarrage de com.android.server.restrictions.RestrictionsManagerService

05-29 10: 37: 57.913926 1127 1127 I SystemServiceManager: Démarrage de com.android.server.media.MediaSessionService

05-29 10: 37: 57.926584 1127 1127 I SystemServer: StartMediaRouterService

05-29 10: 37: 57.939619 1127 1127 I SystemServiceManager: Démarrage de com.android.server.trust.TrustManagerService

05-29 10: 37: 57.952689 1127 1127 I SystemServiceManager: Démarrage de com.android.server.fingerprint.FingerprintService

05-29 10: 37: 58.866228 1127 1127 V FingerprintService: Fingerprint HAL id: 488345235968

05-29 10: 37: 58.867305 1127 1127 I SystemServer: StartBackgroundDexOptService

 

Le début de FingerprintService se trouve dans la méthode startOtherService de SystemServer.Java

/ **

* Démarre un sac à main divers qui n'a pas encore été refactorisé

* et organisé.

* /

private void startOtherServices () {

   contexte de contexte final = mSystemContext;

   Vibrateur VibratorService = null;

   IMountService mountService = null;

   .......

   // Démarrer FingerprintService

   if (mPackageManager.hasSystemFeature (PackageManager.FEATURE_FINGERPRINT)) {

       mSystemServiceManager.startService (FingerprintService.class);

   }

        ......

Une fois démarré ici, FingerprintService sera ajouté à ServiceManager, comme indiqué ci-dessous:

 

Après avoir ajouté FingerprintService à ServiceManager, lors de l'inscription du service dans le bloc de code statique dans SystemServiceRegistry.java, vous pouvez obtenir l'objet FingerprintService Binder à partir de ServiceManager, qui peut construire l'objet FingerprintManager, afin que l'application puisse obtenir l'objet FingerprintManager via le contexte . De plus, la méthode onStart () de FingerprintService appellera également getFingerprintDaemon () pour effectuer les étapes suivantes:

// ①Obtenir l'empreinte digitaled

// ② Enregistrez la fonction de rappel mDaemonCallback avec fingerprintd

// ③Appeler la fonction openhal pour obtenir l'empreinte digitaled

public IFingerprintDaemon getFingerprintDaemon () {

             // ① get fingerprintd

            mDaemon = IFingerprintDaemon.Stub.asInterface (ServiceManager.getService (

            FINGERPRINTD));

            mDaemon.asBinder (). linkToDeath (this, 0);

            // ② Enregistrez la fonction de rappel mDaemonCallback avec fingerprintd

            mDaemon.init (mDaemonCallback);

            // ③ appel à se fingerprintd de openhal fonction

            mHalDeviceId = mDaemon.openHal ();

            ......

    }

L'application obtient le FingerprintManager via le contexte et implémente les fonctions correspondantes en appelant l'interface FingerprintManager. Le FingerprintManager transfère les méthodes dans le FingerprintService. Le FingerprintService est chargé de gérer l'enregistrement complet, d'identifier, de supprimer les empreintes digitales et de vérifier la logique du processus. Communiquez avec la couche FingerprintHal.

A publié 31 articles originaux · Likes6 · Plus de 10 000 visiteurs

Je suppose que tu aimes

Origine blog.csdn.net/u012824529/article/details/104498285
conseillé
Classement