今天继续讲android Contact ContentProvider,讲联系人的data表、raw_contacts表的设计。
以下是android developer官方讲解:
原始联系人
一个原始联系人表示来自某一帐户类型和帐户名称、有关某个联系人的数据。 由于联系人提供程序允许将多个在线服务作为某一联系人的数据源,因此它允许同一联系人对应多个原始联系人。 借助支持多个原始联系人的特性,用户还可以将某一联系人在帐户类型相同的多个帐户中的数据进行合并。
原始联系人的大部分数据并不存储在 ContactsContract.RawContacts 表内,而是存储在 ContactsContract.Data 表中的一行或多行内。每个数据行都有一个 Data.RAW_CONTACT_ID 列,其中包含其父级 ContactsContract.RawContacts 行的 RawContacts._ID 值。
重要的原始联系人列
表 1 列出了 ContactsContract.RawContacts 表中的重要列。请阅读表后的说明:
表 1. 重要的原始联系人列。
列名称 | 用途 | 说明 |
---|---|---|
ACCOUNT_NAME | 作为该原始联系人来源的帐户类型的帐户名称。 例如,Google 帐户的帐户名称是设备所有者的某个 Gmail 地址。如需了解详细信息,请参阅有关 ACCOUNT_TYPE 的下一条目。 | 此名称的格式专用于其帐户类型。它不一定是电子邮件地址。 |
ACCOUNT_TYPE | 作为该原始联系人来源的帐户类型。例如,Google 帐户的帐户类型是 com.google。 请务必使用您拥有或控制的域的域标识符限定您的帐户类型。 这可以确保您的帐户类型具有唯一性。 | 提供联系人数据的帐户类型通常关联有同步适配器,用于与联系人提供程序进行同步。 |
DELETED | 原始联系人的“已删除”标志。 | 此标志让联系人提供程序能够在内部保留该行,直至同步适配器能够从服务器删除该行,然后再从存储区中最终删除该行。 |
说明
以下是关于 ContactsContract.RawContacts 表的重要说明:
- 原始联系人的姓名并不存储其在 ContactsContract.RawContacts 中的行内,而是存储在 ContactsContract.Data 表的 ContactsContract.CommonDataKinds.StructuredName 行内。一个原始联系人在 ContactsContract.Data 表中只有一个该类型的行。
- 注意:要想在原始联系人行中使用您自己的帐户数据,必须先在 AccountManager 中注册帐户。 为此,请提示用户将帐户类型及其帐户名称添加到帐户列表。 如果您不这样做,联系人提供程序将自动删除您的原始联系人行。
例如,如果您想让您的应用为您域名为 com.example.dataservice、基于网络的服务保留联系人数据,并且您的服务的用户帐户是 becky.sharp@dataservice.example.com,则用户必须先添加帐户“类型”(com.example.dataservice) 和帐户“名称”(becky.smart@dataservice.example.com),然后您的应用才能添加原始联系人行。 您可以在文档中向用户解释这项要求,也可以提示用户添加类型和名称,或者同时采用这两种措施。 下文对帐户类型和帐户名称做了更详尽的描述。