粗略了解下指纹的录入和解锁流程, 记录如下
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. 生物解锁--指纹录入流程

    直接从FingerprintManager.java类开始讲起. 首先从enroll方法作为入口 /*** Request fingerprint enrollment. This call warm ...

  2. android keyguard,Android8.1 SystemUI Keyguard之指纹解锁流程

    手指在指纹传感器上摸一下就能解锁,Keyguard是怎么做到的呢? 下面我们就跟着源码,解析这整个过程. 何时开始监听指纹传感器? 先来看下IKeyguardService这个binder接口有哪些回 ...

  3. android指纹解锁动画,Android8.1 SystemUI Keyguard之指纹解锁流程

    手指在指纹传感器上摸一下就能解锁,Keyguard是怎么做到的呢? 下面我们就跟着源码,解析这整个过程. 何时开始监听指纹传感器? 先来看下IKeyguardService这个binder接口有哪些回 ...

  4. android 解锁流程,Android Q 指纹解锁流程

    Android Q 指纹解锁流程 // Authentation Finger Schedule: (close Screen, Authentation with finger(Success)) ...

  5. 基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)

    目录 一.项目功能 二.视频 三.原理图 4.材料选择 5.部分程序 资料下载地址:基于STM32的多功能门禁系统 一.项目功能 1.AS608指纹解锁:可以录入.删除.验证指纹: 2.密码解锁:可以 ...

  6. AI伪造指纹到来,指纹解锁还安全吗?

    自从智能手机设备有了生物指纹识别解锁技术,输入密码这种繁琐的解锁过程,就逐渐被用户抛弃了.2013年苹果公司率先在iPhone 5s上推出Touch ID功能以后,指纹解锁迅速"风靡&quo ...

  7. Python+Qt指纹录入识别考勤系统

    Python+Qt指纹录入识别考勤系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对<<Python+Qt指纹录入识别考勤系统>& ...

  8. 【指纹识别】基于模板匹配算法实现指纹录入打卡系统附matlab代码

    1 简介 指纹识别技术是生物识别技术的一种,正因为指纹具备唯一性和不变性等特征使得指纹识别技术已经被广泛的应用于身份鉴证等多种领域.一般而言,一个指纹数字图像识别系统通常由指纹数字图像预处理.特征提取 ...

  9. vnr光学识别怎么打开_干货|指纹锁的指纹识别模块的前世今生,智能锁的指纹识别到底有多智能?...

    智能锁现在也有很多叫法:指纹锁.电子锁.可见指纹识别是智能锁的核心功能了,那我们今天来聊聊智能锁的指纹识别模块. 指纹识别的历史 指纹识别认证的流程 指纹识别技术的种类 指纹识别的历史 早在2000多 ...

最新文章

  1. 原创整理:92份面试题,累计3625页,肝的太累了
  2. 去掉“3_人民日报语料”中每行前边的数字编号,改成“1, 2,......”
  3. Android fastjson
  4. Linux下SVN服务器的搭建
  5. import win32com.client在python中报错及其解决办法
  6. 代码分析 | 单细胞转录组Normalization详解
  7. android webview圆角,Android 实现一个通用的圆角布局
  8. 解决 Beyond Compare 3 许可证密钥被撤销
  9. Java学习之路 之 容易混淆篇
  10. 阿里云云计算 27 在线实验--SLB初体验
  11. C++学习 8.2 - 类及类成员
  12. 软件测试组工作计划,测试组长工作计划(共10篇).doc
  13. 程序员过了 35 岁还能干嘛?这是我听过最棒的建议!
  14. html修改字体宋体,html怎么设置宋体
  15. 【云原生之Docker实战】使用docker部署DokuWiki知识库系统
  16. Ip可视一键对讲机特点
  17. Win10隐藏状态栏图标的方法
  18. 文件夹重命名,快速修改多个文件夹名称
  19. NOI的1.8.20反反复复
  20. 输入精度e,使用格雷戈里公式求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funpi(e)求π的近似值。

热门文章

  1. Apache ECharts 官网布局排版错乱的解决办法
  2. 怎么查看笔记本内存条型号_笔记本内存条型号简介以及查看方法【图文教程】...
  3. 劳动仲裁委员会的具体地址即(朝阳区酒仙桥南十里居28楼的具体路线)______转...
  4. 阿里云各种API如何使用
  5. 工作流任务调度系统:Apache DolphinScheduler
  6. 【低代码】云端组态集成与设备管理配置
  7. 蓝牙技术|智能蓝牙芯片助力元宇宙发展
  8. APP产品线上埋点方案
  9. Microsoft visual studio安装2013
  10. ubuntu 16.04下载网易云音乐 在处理时有错误发生:netease-cloud-music解决