3

我正在编写一个处理 Android 联系人信息的类,经过一番努力,我编写了一个函数来检索有关用户联系人的所有信息,包括所有电话号码、电子邮件地址、邮政地址等。但是,我仍然没有不明白这些信息是如何存储在手机中的,所以我希望有人能给我一些见解。

因此,一个用户可以有多个电话号码、多个电子邮件地址等。对于ContactsContract.Contacts.CONTENT_URI包含所有联系人的表的联系人和您拥有的电话号码ContactsContract.CommonDataKinds.Phone.CONTENT_URI。但是还有ContactsContract.RawContacts.CONTENT_URI,我认为它应该包含您联系人的所有数据。我的假设是,在 Contacts 表中,联系人 ID 是单独行的唯一标识符,而对于 Phone 表,电话号码是唯一行标识符。如果 RawContacts 包含 ContactsContract 类的所有列,那么每一行都没有唯一标识符,因为每个联系人可能被分配多个电话号码、多个电子邮件地址等。换句话说,我不明白这样的表是结构化的。

所以我的问题是:包含联系信息的各种表——Contacts、Phone、Email、StructuredPostal 等——是完全独立的,还是从较大的 RawContacts 表中提取的每个表的信息?还是我误解了 RawContacts 是什么?由于我正在编写的课程将帮助将联系人从电话联系人列表移动到单独的数据库中,因此了解这些信息将帮助我了解我应该将信息存储在多个数据库中还是只存储一个数据库中(类似于我上面描述的 RawContacts 数据库) .

4

1 回答 1

1

android API GuideContacts Provider很好地描述了联系人表的存储方式(有点复杂,允许合并许多联系人)

数据层次结构图

来自 android api 指南的联系人提供者数据层次结构

你的问:

所以我的问题是:包含联系信息的各种表——Contacts、Phone、Email、StructuredPostal 等——是完全独立的,还是从较大的 RawContacts 表中提取的每个表的信息?

再次查看文档(我没有针对这些表进行编码,只阅读文档),电话、电子邮件...表似乎是分开的。但是,信息看起来存储在两个表中,即联系人以及 RawContacts。

于 2013-04-24T05:48:08.517 回答