指纹框架--指纹选项加载(一)
来源:互联网 发布:js获取当前点击的元素 编辑:程序博客网 时间:2024/04/30 03:40
一、概述
近几年手指指纹识别快速发展,基本所有的手机都配套指纹识别器;Android6.0开始Google提供标准的上层指纹框架。下面先分析一下;系统中的设置是如何判断要不要加载指纹选项?
二、指纹框架示意图
三、指纹选项加载过程
1、–>SecuritySettings.java 入口
1.1 onResume()
public void onResume() { super.onResume(); // Make sure we reload the preference hierarchy since some of these settings // depend on others... createPreferenceHierarchy(); ............ }
1.2 createPreferenceHierarchy()
private PreferenceScreen createPreferenceHierarchy() { ............... // Fingerprint and trust agents信托代理 PreferenceGroup securityCategory = (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY); if (securityCategory != null) { maybeAddFingerprintPreference(securityCategory);//是否加载指纹选项 addTrustAgentSettings(securityCategory); } ............... }
1.3 maybeAddFingerprintPreference()
private void maybeAddFingerprintPreference(PreferenceGroup securityCategory) { FingerprintManager fpm = (FingerprintManager) getActivity().getSystemService( Context.FINGERPRINT_SERVICE);//获取指纹服务 if (!fpm.isHardwareDetected()) {//判断硬件是否支持指纹功能 Log.v(TAG, "No fingerprint hardware detected!!"); return; } Preference fingerprintPreference = new Preference(securityCategory.getContext()); fingerprintPreference.setKey(KEY_FINGERPRINT_SETTINGS); fingerprintPreference.setTitle(R.string.security_settings_fingerprint_preference_title); Intent intent = new Intent(); final List<Fingerprint> items = fpm.getEnrolledFingerprints(); final int fingerprintCount = items != null ? items.size() : 0; final String clazz; if (fingerprintCount > 0) { fingerprintPreference.setSummary(getResources().getQuantityString( R.plurals.security_settings_fingerprint_preference_summary, fingerprintCount, fingerprintCount)); clazz = FingerprintSettings.class.getName(); } else { fingerprintPreference.setSummary( R.string.security_settings_fingerprint_preference_summary_none); clazz = FingerprintEnrollIntroduction.class.getName(); } intent.setClassName("com.android.settings", clazz); fingerprintPreference.setIntent(intent); securityCategory.addPreference(fingerprintPreference); }
2、FingerprintManager.java
public boolean isHardwareDetected() { if (mService != null) { try { long deviceId = 0; /* TODO: plumb hardware id to FPMS */ return mService.isHardwareDetected(deviceId, mContext.getOpPackageName()); } catch (RemoteException e) { Log.v(TAG, "Remote exception in isFingerprintHardwareDetected(): ", e); } } else { Log.w(TAG, "isFingerprintHardwareDetected(): Service not connected!"); } return false; }
指纹服务的管理类,提供接口给APP调用;本身通过binder远程调用后台服务。
3、IFingerprintService.aidl
boolean isHardwareDetected(long deviceId, String opPackageName);
此函数为声明的接口,具体实现在子类FingerprintServiceWrapper 中。
4、FingerprintService.java
4.1 继承关系
private final class FingerprintServiceWrapper extends IFingerprintService.Stub {............}
FingerprintService的内部类FingerprintServiceWrapper 继承IFingerprintService.Stub
4.2 isHardwareDetected()
public boolean isHardwareDetected(long deviceId, String opPackageName) { if (!canUseFingerprint(opPackageName, false /* foregroundOnly */)) { return false; } return mHalDeviceId != 0; }
如果没有编译fingerprintd或者fingerprintd没有成功初始化;mHalDeviceId就无法赋值,此时没有指纹选项;若mHalDeviceId 不等于零则表示硬件支持,显示指纹选项
下一篇将继续往下分析mHalDeviceId的初始化;未完待续。。。
阅读全文
0 0
- 指纹框架--指纹选项加载(一)
- 指纹
- Android M 指纹框架
- 磁共振指纹压缩感知框架
- 汽车指纹一键启动
- Android M6.0指纹框架概要
- pcduino指纹门禁开发–篇一
- 信息指纹
- 信息指纹
- 指纹验证
- 数据指纹
- 信息指纹
- 指纹拼接
- 指纹解锁
- 指纹解锁
- android 指纹
- 设备指纹
- Android指纹
- hdu 1255 覆盖的面积(线段树+扫描线——面积交)
- HTML关键字<6>
- 安装 JPEG Toolbox
- POJ 1426 Find The Multiple DFS
- Effective Approaches to Attention-based Neural Machine Translation
- 指纹框架--指纹选项加载(一)
- mapreduce初印象
- 模拟实现通讯录-动态
- 段落向量与句子向量表达
- 接口设计----依赖倒置原则
- JDBC_事务
- HDU 1233 还是畅通工程
- iOS 面试题归纳整理—进阶篇(持续更新中)
- 摘录卢先生的随笔