13.5 Android联系人处理
本章的前部分介绍了各种核心机制,可以看到Android的基本原理、组件及意图在系统中的应用,而在本节,要介绍另一种重要的组件应用,即数据源组件。
在Android系统中,我们经常需要读取和写入联系人数据,对联系人数据的管理体现了Android读写数据源的基本模式。
13.5.1 Android联系人数据存储框架
Android设备上的联系人数据,都存储在联系人数据源组件com.android.providers.contacts.ContactsProvider2中。与一般的数据源组件相比,联系人数据源的存储结构更为复杂,其中的数据库包含多个表,提供的Uri也更为丰富。学习如何使用联系人数据,需要先了解联系人数据的存储框架。
联系人数据主要包含三部分,一部分存储在联系人基本信息表中,其中包含联系人的名字、姓氏等,每个联系人在不同帐号的系统下都有相关的信息,这些信息存储在联系人帐号记录表中,除此之外,联系人的具体的联系方式数据,存储在联系方式表中。
举个例子来介绍一下这些数据之间的关系。比方说,有一个联系人叫小明,那么小明就会在联系人基本信息表中有一条记录。小明可能既是你的Google联系人,又是你的163邮箱联系人,同时还是你的skype好友。那么,这些不同帐号下关于小明的信息,就会放置在联系人帐号记录表中。而每一个帐号中,都有小明的具体的联系方式,比如手机号、邮箱帐号、住址等,这些具体的联系方式,会存储在联系方式表内(如图13-8所示)。
这些数据表,构成了整个联系人记录存储的核心部分。但除此之外,联系人数据库中还有一些有辅助功能的表。比如:联系人分组信息表,是用来存储联系人分组信息的,可以将好友、工作伙伴、家人放到不同的联系人分组中。
另外,为了提升联系人查询的性能,Android为联系人的一些常用数据构建了独立的快速索引表,包括:电话记录索引表、邮箱地址索引表等。这些索引表的主键是电话、邮箱等联系人信息,其数据行中存储着与每个联系人信息对应的联系人记录ID,通过这样的索引表,可以快速地基于邮箱、电话来查询联系人信息,显著地提高查询效率。
图 13-8 Android联系人记录的核心表结构