本文将介绍系统接收到来电之后,如何在电话薄中进行匹配联系人的流程。分析将从另外一篇文章(基于Android6.0的RIL框架层模块分析)中提到的与本文内容相关的代码开始。 //packages/service/***/Call.java public void handleCreateConnectionSuccess( CallIdMapper idMapper, ParcelableConnection connection) { setHandle(connection.getHandle(), connection.getHandlePresentation());//这个函数 在Android 6.0系统中,当来电时,系统需要将来电号码与用户电话薄中的联系人进行匹配,以便提供正确的来电显示信息。这一过程涉及到了多个组件和接口的交互,包括RIL(Radio Interface Layer)、Telecom Service、Content Providers以及异步查询处理。以下是对这一流程的详细解析: 当电话服务接收到RIL发送的来电信息时,会触发`handleCreateConnectionSuccess`方法。在这个方法中,`setHandle`函数被调用,传入来电的电话号码和呈现方式。这个函数的目的是启动一个查询,用于查找电话薄中的匹配联系人。`setHandle`内部调用了`startCallerInfoLookup`,进一步触发了对来电号码的查询逻辑。 `startCallerInfoLookup`中,系统获取来电号码,并通过`mCallerInfoAsyncQueryFactory`发起异步查询。`mCallerInfoAsyncQueryFactory`通常在`TelecomService`初始化时被赋值。当`TelecomService`被系统启动并绑定时,它会在`onBind`方法中调用`initializeTelecomSystem`进行初始化。 `TelecomService`的启动是由`TelecomLoaderService`控制的,`TelecomLoaderService`会定义`SERVICE_COMPONENT`,指定`com.android.server.telecom`包下的`TelecomService`组件。当系统需要电话服务时,会通过`bindService`调用`SERVICE_COMPONENT`来启动并连接`TelecomService`。 异步查询的执行依赖于`mCallerInfoAsyncQueryFactory`,它会启动一个线程,通过`startQuery`方法调用Content Resolver发起SQL查询,针对`ContactsContract`提供的数据表,特别是`ContactsContract.CommonDataKinds.Phone`表,来查找与来电号码相匹配的联系人信息。`mCallerInfoQueryListener`是查询监听器,当查询完成时,它会接收到查询结果并处理。 查询过程中,`mQueryToken`用于确保新查询的结果不会覆盖旧查询的结果,`mCallerInfo`用于存储查询到的联系人信息。如果查询到的号码存在于电话薄中,`mCallerInfo`会被填充相应的联系人信息,包括姓名、照片等,然后这些信息会被用来显示来电界面。 此外,系统还会检查`direct-to-voicemail`属性,决定是否直接将来电转至语音邮箱,而不需要用户干预。这涉及到一个延迟执行的任务`mDirectToVoicemailRunnable`,如果在指定时间内查询未完成,系统会继续展示来电屏幕。 总结来说,Android 6.0来电号码与电话薄联系人的匹配是一个涉及RIL、Telecom Service、Content Provider和异步查询处理的复杂过程。系统通过一系列的回调和异步操作,确保在来电时能够及时且准确地匹配到联系人信息,从而提供良好的用户体验。
























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 《Redis 深度历险》学习与实践的笔记整理
- (源码)基于Arduino框架的物品管理库存系统-The Ark.zip
- (源码)基于PythonDjango框架的个人博客网站.zip
- (源码)基于Node.js和Koa框架的电商平台.zip
- (源码)基于Arduino语言的杂项项目.zip
- (源码)基于Arduino的自动浇水系统.zip
- (源码)基于Python和Tkinter的机器人控制界面.zip
- 机器学习、深度学习与自然语言处理等算法的实现示例、博客配套及论文复现
- (源码)基于Spring Boot框架的权限管理系统.zip
- 【51单片机要求:按下按键K3,蜂鸣器响一声,发光二极管D1点亮,再次按下该按键发光二极管D2点亮,注意此时D1依然亮着,依此类推,当第八次接下该安键时,八个发光二极管全部点亮】
- (源码)基于STM32的惯性导航系统.zip
- (源码)基于物联网和MQTT协议的智能垃圾桶监测系统.zip
- (源码)基于物联网的建筑物故障检测与指示系统.zip
- 深度剖析深度学习原理,从零构建专属深度学习库
- 大连理工大学信息检索研究室 2017 年深度学习实践培训内容详情
- 深度学习论文阅读笔记(2013-2018 年)- 研读记录



评论0