Android 6.0 来电匹配联系人解析

0 下载量 183 浏览量 更新于2024-09-01 收藏 143KB PDF 举报
"Android6.0来电号码与电话薄联系人匹配方法详解" 在Android系统中,来电号码与电话簿联系人的匹配是用户界面提供来电显示功能的关键部分。Android 6.0 (Marshmallow) 中,这个过程涉及到多个层级的交互,从底层的RIL (Radio Interface Layer) 到上层的应用服务。下面我们将详细探讨这一匹配过程。 首先,当手机接收到一个新的来电时,RIL会处理这个事件,并将相关信息通过 Binder 机制传递到上层的服务,例如 PhoneStateListener 的监听器。在这些监听器中,我们可以找到处理来电信息的代码。这部分通常涉及到对`Call`类的操作,比如`handleCreateConnectionSuccess()`方法。这个方法在来电成功建立连接时被调用,它会处理来电的细节,如电话号码、显示名称等。 在`handleCreateConnectionSuccess()`中,`setHandle()`函数被调用,用于设置通话的电话号码和呈现方式。这里的电话号码是来电匹配的核心。系统会使用这个号码去查询电话簿,以找到与之关联的联系人信息。这一步通常通过ContentResolver执行SQL查询来完成,查询的数据源是`ContactsContract`,特别是`ContactsContract.CommonDataKinds.Phone`表,其中存储了联系人的电话号码和对应的联系人ID。 接下来,`setCallerDisplayName()`设置来电显示名称,这个名称通常是联系人的名字。如果电话号码在电话簿中存在,那么这个名字就会被填充。如果号码不在电话簿中,系统可能会尝试使用网络服务来获取显示名称,或者只显示电话号码本身。 在Android 6.0中,还有一个特性是直接转至语音邮件的判断。如果电话号码具有"直接转至语音邮件"的属性,系统会在展示来电屏幕之前等待一段时间,以确认是否应该直接将呼叫转至语音邮件,而不是显示给用户。这通过`mDirectToVoicemailQueryPending`标志和`mDirectToVoicemailRunnable`来实现,它们用于设定查询超时和处理结果。 Android 6.0的来电号码与电话簿联系人匹配涉及了以下步骤: 1. 接收RIL层传来的来电信息。 2. 使用电话号码查询`ContactsContract`中的联系人信息。 3. 设置来电显示名称,如果匹配到联系人则显示联系人姓名。 4. 判断是否直接转至语音邮件,根据结果决定是否立即展示来电屏幕。 了解这个过程对于开发者来说很重要,因为可以据此优化来电体验,比如添加自定义的来电识别功能,或者处理特殊情况,如拦截未知号码。同时,这也涉及到用户隐私和数据安全,因此在处理联系人信息时必须遵守相应的权限规定。