Android6.0来电匹配电话薄联系人解析
142 浏览量
更新于2024-08-28
收藏 140KB PDF 举报
"Android6.0来电号码与电话薄联系人匹配流程分析"
在Android系统中,来电处理是一项关键功能,它涉及到系统如何识别并显示来电者的相关信息。在Android 6.0(Marshmallow)中,当电话服务接收到一个新的来电时,会有一系列的步骤来确定这个号码是否与电话薄中的联系人相匹配。以下是对这一过程的详细解释:
首先,当电话服务接收到一个来电,`handleCreateConnectionSuccess`方法会被调用。在这个方法中,我们看到`setHandle`函数被调用,传入了`connection.getHandle()`和`connection.getHandlePresentation()`。`getHandle`方法返回的是一个代表来电号码的Parcel对象,通常是一个字符串形式的电话号码。`getHandlePresentation`则提供关于电话号码显示的指示,比如是否应该隐藏或者显示号码。`setHandle`函数在这里的作用是初始化Call对象,并关联来电的电话号码。
接着,`setCallerDisplayName`被调用,用于设置来电者的显示名称。如果电话簿中有对应的联系人,这个名称会是联系人的名字;否则,可能是原始的电话号码。
在处理来电时,Android系统可能会等待一段时间,以查询来电者是否已设置为直接转到语音邮件。这通过`mDirectToVoicemailQueryPending`标志实现,表示查询是否正在进行。为了防止查询超时,系统会使用`mHandler.postDelayed`方法设置一个延迟执行的任务,即`mDirectToVoicemailRunnable`,这个任务会在指定的时间(由`Timeouts.getDirectToVoicemailMillis`计算得出)后运行,检查来电是否应直接转到语音邮件,而不是展示给用户。
为了匹配来电号码与电话薄中的联系人,Android系统会使用ContentResolver发起一个Cursor查询。查询通常针对`ContactsContract.Data`表进行,该表包含了联系人的所有数据项,包括电话号码。查询条件可能包含来电号码,以便找到与之匹配的联系人记录。`Uri`对象,如`ContactsContract.CommonDataKinds.Phone.CONTENT_URI`,可以作为查询的起点,而`cursor`则用于存储查询结果。
查询过程中,`id`和`token`是两个重要的参数。`id`通常是指联系人的ID,它是联系人在数据库中的唯一标识。`token`可能用于追踪特定查询的上下文,例如在多线程环境下的并发查询。
一旦查询完成,系统会检查结果。如果Cursor中有匹配的记录,那么来电者的信息就会显示为联系人的名字和照片等详细信息。如果没有匹配,来电显示将仅包含电话号码。此外,系统还会考虑联系人的优先级和用户设置,决定是否显示来电通知、振动或播放特定的铃声。
Android 6.0在处理来电时,通过获取和解析来电号码,启动查询联系人数据,然后匹配和显示相应的联系人信息。这个过程涉及到了RIL框架层、电话服务、ContentResolver和数据查询等多个组件,确保了来电显示的准确性和用户体验。
139 浏览量
点击了解资源详情
2023-09-09 上传
2023-08-20 上传
2023-10-03 上传
2023-06-28 上传
2023-12-23 上传
2024-01-23 上传
2023-06-23 上传
weixin_38655484
- 粉丝: 4
- 资源: 909
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解