Análise de processo do módulo de impressão digital (4) processo de gravação de impressão digital

4. Processo de gravação de impressões digitais

 

A atividade de gravação de impressão digital implementa a interface FingerprintEnrollSidecar.Listener para FingerprintEnrollEnrolling.

// Prompt durante a gravação de impressões digitais (como rápido demais, mova o dedo etc.)

    @Sobrepor

    public void onEnrollmentHelp (CharSequence helpString) {

        mErrorText.setText (helpString);

    }

    // Indica que a gravação da impressão digital atingiu o tempo limite ou não está registrada.

    @Sobrepor

    public void onEnrollmentError (int errMsgId, CharSequence errString) {

        int msgId;

         ......

         showErrorDialog (getText (msgId), errMsgId);

        ......

    }

    // Alterações em andamento durante a gravação

    @Sobrepor

    public void onEnrollmentProgressChange (int steps, int restante) {

        updateProgress (true / * animate * /); // Atualizar progresso

        updateDescription (); // Atualizar descrição

        animateFlash (); // Atualizar animação

        ......

}

O método onStart do FingerprintEnrollSidecar chama startEnrollment (), que chama o método de registro do FingerrollManager, e o objeto EnrollmentCallback é passado. EnrollmentCallback é o retorno de chamada do resultado da entrada de impressão digital e os métodos na interface FingerprintEnrollSidecar.Listener são chamados separadamente para que possam ser atualizados Progresso da gravação de impressões digitais e resultados da gravação.

private void startEnrollment () {

        ......

        mFingerprintManager.enroll (mToken, mEnrollmentCancel,

                0 / * sinalizadores * /, mUserId, mEnrollmentCallback);

        mEnrolling = true;

    }

 

    private FingerprintManager.EnrollmentCallback mEnrollmentCallback

            = new FingerprintManager.EnrollmentCallback () {

 

        @Sobrepor

        public void onEnrollmentProgress (int remanescente) {

           ......

                mListener.onEnrollmentProgressChange (mEnrollmentSteps, restante);

            }

        }

 

        @Sobrepor

        public void onEnrollmentHelp (int helpMsgId, CharSequence helpString) {

            if (mListener! = null) {

                mListener.onEnrollmentHelp (helpString);

            }

        }

 

        @Sobrepor

        public void onEnrollmentError (int errMsgId, CharSequence errString) {

            if (mListener! = null) {

                mListener.onEnrollmentError (errMsgId, errString);

            }

            mEnrolling = false;

        }

    };

 

    registro de cancelamento público (byte [] token, CancellationSignal cancel, int flags,

            int userId, retorno de chamada EnrollmentCallback) {

            ......

            mService.enroll (mToken, token, userId, mServiceReceiver, sinalizadores,

                    mContext.getOpPackageName ());

            ......

Preste atenção ao objeto mServiceReceiver de entrada.Este objeto enviará mensagens relacionadas através do manipulador para chamar os métodos em EnrollmentCallback ou AuthenticationCallback.

private IFingerprintServiceReceiver mServiceReceiver = novo IFingerprintServiceReceiver.Stub () {

        @Override // binder call

        public void onEnrollResult (long deviceId, int fingerId, int groupId, int restantes) {

            mHandler.obtainMessage (MSG_ENROLL_RESULT, restante, 0,

                    nova impressão digital (null, groupId, fingerId, deviceId)). sendToTarget ();

        }

 

        @Override // binder call

        public void onAcquired (long deviceId, intquireInfo) {

            mHandler.obtainMessage (MSG_ACQUIRED, PurchaseInfo, 0, deviceId) .sendToTarget ();

        }

 

        @Override // binder call

        public void onAuthenticationSucceeded (long deviceId, impressão digital fp, int userId) {

            mHandler.obtainMessage (MSG_AUTHENTICATION_SUCCEEDED, userId, 0, fp) .sendToTarget ();

        }

 

        @Override // binder call

        public void onAuthenticationFailed (long deviceId) {

            mHandler.obtainMessage (MSG_AUTHENTICATION_FAILED) .sendToTarget () ;;

        }

 

        @Override // binder call

        public void onError (long deviceId, int error) {

            mHandler.obtainMessage (MSG_ERROR, erro, 0, deviceId) .sendToTarget ();

        }

 

        @Override // binder call

        public void onRemoved (long deviceId, int fingerId, int groupId) {

            mHandler.obtainMessage (MSG_REMOVED, fingerId, groupId, deviceId) .sendToTarget ();

        }

    };

 

public void handleMessage (mensagem do android.os.Message) {

            switch (msg.what) {

                caso MSG_ENROLL_RESULT:

                    sendEnrollResult ((Impressão digital) msg.obj, msg.arg1 / * restante * /);

                    quebrar;

                caso MSG_ACQUIRED:

                    sendAcquiredResult ((Long) msg.obj / * deviceId * /,

                    msg.arg1 / * adquirir informações * /);

                    quebrar;

                caso MSG_AUTHENTICATION_SUCCEEDED:

                    sendAuthenticatedSucceeded ((Impressão digital) msg.obj, msg.arg1 / * userId * /);

                    quebrar;

                caso MSG_AUTHENTICATION_FAILED:

                    sendAuthenticatedFailed ();

                    quebrar;

                caso MSG_ERROR:

                    sendErrorResult ((Long) msg.obj / * deviceId * /, msg.arg1 / * errMsgId * /);

                    quebrar;

                caso MSG_REMOVED:

                    sendRemovedResult ((Long) msg.obj / * deviceId * /, msg.arg1 / * fingerId * /,

                            msg.arg2 / * groupId * /);

            }

        }

O FingerprintManager e o FingerprintService se comunicam diretamente por meio de ajuda.No FingerprintService, a classe interna FingerprintServiceWrapper implementa o IFingerprintService.Stub.O método de registro do Fingerroller que chamamos é o de register () na classe FingerprintServiceWrapper.

classe final privada FingerprintServiceWrapper estende IFingerprintService.Stub {

        ......

        @Override // Chamada de fichário

        registro público nulo (token IBinder final, byte final [] cryptoToken,

                final int userId, receptor final IFingerprintServiceReceiver,

                bandeiras finais do int,

                final String opPackageName) {

            checkPermission (MANAGE_FINGERPRINT);

            limite final int = mContext.getResources (). getInteger (

                   com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);

            final int inscrito = FingerprintService.this.

                    getEnrolledFingerprints (userId) .size ();

            if (inscrito> = limite) {

                Slog.w (TAG, "Muitas impressões digitais registradas");

                Retorna;

            }

            ......

            mHandler.post (novo Runnable () {

                @Sobrepor

                public void run () {

                    startEnrollment (token, cryptoToken, userId, receiver,

                    sinalizadores, restritos, opPackageName);

                }

            });

        }

O método start de EnrollClient é chamado no método startEnrollment.O EnrollClient rastreia o status de gravação da impressão digital de um determinado cliente.

/ **

 * Uma turma para acompanhar o estado da inscrição para um determinado cliente.

 * /

classe abstrata pública EnrollClient estende o ClientMonitor {

    ......

    public EnrollClient (contexto de contexto, long halDeviceId, token IBinder,

            IFingerprintServiceReceiver, int userId, int groupId, byte [] cryptoToken,

            booleano restrito, proprietário da string) {

        super (contexto, halDeviceId, token, receptor, userId, groupId, restringido, proprietário);

        ......

    }

 

    @Sobrepor

    public boolean onEnrollResult (int fingerId, int groupId, int remanescente) {

        ......

        retornar sendEnrollResult (fingerId, groupId, restante);

    }

 

    / *

     * @return true se terminarmos.

     * /

    sendEnrollResult booleano privado (int fpId, int groupId, int remanescente) {

        IFingerprintServiceReceiver receiver = getReceiver ();

            ......

            receiver.onEnrollResult (getHalDeviceId (), fpId, groupId, restante);

            ......

    }

 

    @Sobrepor

    public int start () {

        Daemon IFingerprintDaemon = getFingerprintDaemon ();

            ......

            resultado final int = daemon.enroll (mCryptoToken, getGroupId (), tempo limite);

            ......

        retornar 0; // sucesso

    }

 

O método start chamará fingerprintd e chamará a biblioteca de impressões digitais inferior.Depois que a biblioteca inferior retornar o resultado, chamaráEnrollResult para retornar o resultado ao receptor e enviar feedback para a camada superior. Este é o processo de gravação de impressões digitais.

Publicado 31 artigos originais · Curtidas6 · Visitantes 10.000+

Acho que você gosta

Origin blog.csdn.net/u012824529/article/details/104498366
Recomendado
Clasificación