android 联系人源码分析 新字段的添加流程

先大致分析下表的结构  账户表 contacts  --- 联系人表rawcontacts --- 联系人详细数据表 data 依此是一对多的关系。

我们要加的字段就是新增一个字段及其相关字段(minitype,data1等) 到data表里,关联上rawcontacts contacts即可。

android 联系人 代码主要分布在四个地方:

1 framwork/base/core/java/android/provider/

framwork下面主要是系统公用的数据字段

比如: framwork/base/core/java/android/provider/contacts.java

里面会有一些 联系人数据库里面的 字段: notes,email,name


2 packages/providers/contactsprovider/


providers 下面 主要是 数据库表的创建和增删查改的操作

增删查改主要是在 contactsprovider2.java里面


3 packages/apps/contacts

contacts下面则主要是联系人的显示。

而具体的操作好多都是调用 contactscommon里面的view 或 方法。

4 packages/apps/contactscommon

contactscommon下面主要是一些表的通用操作,自定义view。比如联系人 邮箱字段的显示,添加操作


下面就以 添加一个 生日字段为例 来 梳理下 整个流程。

1 framwork 下面 添加 字段

contacts下面:

contactscontract下面:


下面 进入 provider

contactsprovider2 会对datarowhandler 进行数据的增删查找,我们只需继承复写一个并将其加入进来

下面 legacyapisupport (应该是对之前版本及不兼容接口的再处理,就没咋动)

接下来就是 contactscommon

这里的联系人的每一行对应一个dataitem 我们要继承这个dataitem

账户基类 需要添加对这个字段的支持 BaseAccountType

并看看是否所有的账户都需要显示这个字段,然后个个账户自行配置该字段

最后 就是contacts 里面了

这里需要对新增加的字段显示,QuickContactActivity 里面 dataitemToEntry 方法里增加对该数据的判断并进行显示。

你可能感兴趣的:(android,系统分析)