指纹录入和指纹解锁流程
粗略了解下指纹的录入和解锁流程, 记录如下
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.xmlFinger 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());
指纹录入和指纹解锁流程相关推荐
- 生物解锁--指纹录入流程
直接从FingerprintManager.java类开始讲起. 首先从enroll方法作为入口 /*** Request fingerprint enrollment. This call warm ...
- android keyguard,Android8.1 SystemUI Keyguard之指纹解锁流程
手指在指纹传感器上摸一下就能解锁,Keyguard是怎么做到的呢? 下面我们就跟着源码,解析这整个过程. 何时开始监听指纹传感器? 先来看下IKeyguardService这个binder接口有哪些回 ...
- android指纹解锁动画,Android8.1 SystemUI Keyguard之指纹解锁流程
手指在指纹传感器上摸一下就能解锁,Keyguard是怎么做到的呢? 下面我们就跟着源码,解析这整个过程. 何时开始监听指纹传感器? 先来看下IKeyguardService这个binder接口有哪些回 ...
- android 解锁流程,Android Q 指纹解锁流程
Android Q 指纹解锁流程 // Authentation Finger Schedule: (close Screen, Authentation with finger(Success)) ...
- 基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)
目录 一.项目功能 二.视频 三.原理图 4.材料选择 5.部分程序 资料下载地址:基于STM32的多功能门禁系统 一.项目功能 1.AS608指纹解锁:可以录入.删除.验证指纹: 2.密码解锁:可以 ...
- AI伪造指纹到来,指纹解锁还安全吗?
自从智能手机设备有了生物指纹识别解锁技术,输入密码这种繁琐的解锁过程,就逐渐被用户抛弃了.2013年苹果公司率先在iPhone 5s上推出Touch ID功能以后,指纹解锁迅速"风靡&quo ...
- Python+Qt指纹录入识别考勤系统
Python+Qt指纹录入识别考勤系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对<<Python+Qt指纹录入识别考勤系统>& ...
- 【指纹识别】基于模板匹配算法实现指纹录入打卡系统附matlab代码
1 简介 指纹识别技术是生物识别技术的一种,正因为指纹具备唯一性和不变性等特征使得指纹识别技术已经被广泛的应用于身份鉴证等多种领域.一般而言,一个指纹数字图像识别系统通常由指纹数字图像预处理.特征提取 ...
- vnr光学识别怎么打开_干货|指纹锁的指纹识别模块的前世今生,智能锁的指纹识别到底有多智能?...
智能锁现在也有很多叫法:指纹锁.电子锁.可见指纹识别是智能锁的核心功能了,那我们今天来聊聊智能锁的指纹识别模块. 指纹识别的历史 指纹识别认证的流程 指纹识别技术的种类 指纹识别的历史 早在2000多 ...
最新文章
- 原创整理:92份面试题,累计3625页,肝的太累了
- 去掉“3_人民日报语料”中每行前边的数字编号,改成“1, 2,......”
- Android fastjson
- Linux下SVN服务器的搭建
- import win32com.client在python中报错及其解决办法
- 代码分析 | 单细胞转录组Normalization详解
- android webview圆角,Android 实现一个通用的圆角布局
- 解决 Beyond Compare 3 许可证密钥被撤销
- Java学习之路 之 容易混淆篇
- 阿里云云计算 27 在线实验--SLB初体验
- C++学习 8.2 - 类及类成员
- 软件测试组工作计划,测试组长工作计划(共10篇).doc
- 程序员过了 35 岁还能干嘛?这是我听过最棒的建议!
- html修改字体宋体,html怎么设置宋体
- 【云原生之Docker实战】使用docker部署DokuWiki知识库系统
- Ip可视一键对讲机特点
- Win10隐藏状态栏图标的方法
- 文件夹重命名,快速修改多个文件夹名称
- NOI的1.8.20反反复复
- 输入精度e,使用格雷戈里公式求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funpi(e)求π的近似值。
热门文章
- Apache ECharts 官网布局排版错乱的解决办法
- 怎么查看笔记本内存条型号_笔记本内存条型号简介以及查看方法【图文教程】...
- 劳动仲裁委员会的具体地址即(朝阳区酒仙桥南十里居28楼的具体路线)______转...
- 阿里云各种API如何使用
- 工作流任务调度系统:Apache DolphinScheduler
- 【低代码】云端组态集成与设备管理配置
- 蓝牙技术|智能蓝牙芯片助力元宇宙发展
- APP产品线上埋点方案
- Microsoft visual studio安装2013
- ubuntu 16.04下载网易云音乐 在处理时有错误发生:netease-cloud-music解决