先大致分析下表的結構 賬戶表 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 方法裏增加對該數據的判斷並進行顯示。