Segundo, proceso de inicialización del marco de huellas dactilares
Cuando se enciende el sistema, se iniciarán varios servicios, incluido FingerprintService. Se puede ver desde el registro de arranque (sys_log.boot) en la siguiente figura:
05-29 10: 37: 57.870869 1127 1127 I SystemServiceManager: Iniciando com.android.server.dreams.DreamManagerService
05-29 10: 37: 57.874643 1127 1127 En SystemServer: StartAssetAtlasService
05-29 10: 37: 57.883240 1127 1127 I SystemServiceManager: Inicio de com.android.server.print.PrintManagerService
05-29 10: 37: 57.910104 1127 1127 I SystemServiceManager: Inicio de com.android.server.restrictions.RestrictionsManagerService
05-29 10: 37: 57.913926 1127 1127 I SystemServiceManager: Inicio 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: Inicio de com.android.server.trust.TrustManagerService
05-29 10: 37: 57.952689 1127 1127 I SystemServiceManager: Inicio de com.android.server.fingerprint.FingerprintService
05-29 10: 37: 58.866228 1127 1127 V Servicio de huellas digitales: Identificación de HAL de huellas digitales: 488345235968
05-29 10: 37: 58.867305 1127 1127 I SystemServer: StartBackgroundDexOptService
El inicio de FingerprintService se encuentra en el método startOtherService de SystemServer.Java
/ **
* Inicia una bolsa de sorpresas de cosas que aún no se han refactorizado
* y organizado.
* /
privado void startOtherServices () {
Contexto final contexto = mSystemContext;
VibratorService vibrator = null;
IMountService mountService = nulo;
.......
// Iniciar FingerprintService
if (mPackageManager.hasSystemFeature (PackageManager.FEATURE_FINGERPRINT)) {
mSystemServiceManager.startService (FingerprintService.class);
}
......
Cuando se inicia aquí, FingerprintService se agregará a ServiceManager, como se muestra a continuación:
Después de agregar FingerprintService a ServiceManager, al registrar el servicio en el bloque de código estático en SystemServiceRegistry.java, puede obtener el objeto FingerprintService Binder de ServiceManager, que puede construir el objeto FingerprintManager, de modo que la aplicación pueda obtener el objeto FingerprintManager a través del Contexto . Además, el método onStart () de FingerprintService también llamará a getFingerprintDaemon () para completar los siguientes pasos:
// ① Obtener huellas digitales
// ② Registre la función de devolución de llamada mDaemonCallback con fingerprintd
// ③ Llama a la función openhal para obtener huellas
public IFingerprintDaemon getFingerprintDaemon () {
// ① get fingerprintd
mDaemon = IFingerprintDaemon.Stub.asInterface (ServiceManager.getService (
HUELLA DIGITAL));
mDaemon.asBinder (). linkToDeath (this, 0);
// ② Registre la función de devolución de llamada mDaemonCallback con fingerprintd
mDaemon.init (mDaemonCallback);
// ③ llamar para obtener fingerprintd de openhal función
mHalDeviceId = mDaemon.openHal ();
......
}
El lado de la aplicación obtiene el FingerprintManager a través del Contexto e implementa la función correspondiente llamando a la interfaz FingerprintManager. El FingerprintManager transfiere los métodos en el FingerprintService. El FingerprintService es responsable de administrar todo el registro, identificar, eliminar huellas digitales y verificar la lógica del proceso. El FingerprintService llama a la interfaz de la huella digital, a través de la huella digital. Comuníquese con la capa FingerprintHal.