Android 中的 ContactsContract 概述

ContactsContract Overview in Android

我刚刚浏览了 Android 中的 ContactsContract API,我对它的概述部分感到困惑。

然后我得到了这个 link https://developer.android.com/guide/topics/providers/contacts-provider 但我仍然难以理解 android 中的联系人。

你们中的任何人都可以向我提供 link 或解释什么是联系人,在 Android 的角度来看,对我来说,这只是我们在 phone 上保存的号码但我现在知道这还不止于此。请向我解释(或提供 link 更简单或更清晰的解释,这不是 android 文档本身)这三个 table 包含什么,因为我无法从文档中理解它.

  1. ContactsContract.Contacts table
  2. ContactsContract.RawContacts table
  3. ContactsContract.Data table

提前致谢。

正如我之前在许多答案中以各种措辞所写:

联系人数据库主要分为三个 table:

  1. Contacts - 每个条目代表一个联系人,并将一个或多个 RawContacts
  2. 组合在一起
  3. RawContacts - 每个条目代表有关联系人的数据,这些数据由某些 SyncAdapter(例如 Whatsapp、Google、Facebook、Viber)同步,这将多个数据条目分组
  4. Data - 有关联系人、电子邮件、电话等的实际数据。每一行都是属于单个 RawContact
  5. 的单个数据

通常情况下,希望创建新联系人的应用程序(例如 Google、Whatsapp、Linkedin)会在 RawContacts table 中创建一个新行通常只包含一个名称,然后使用该行的 _ID 将行添加到 Data table 中,用于电话、电子邮件、地址、照片等

Android 将在 Contacts 中创建一个新行以分配给新的原始联系人(即创建了一个新联系人),或者如果它决定原始联系人包含类似现有联系人的足够信息,将有一个现有联系人行分配给新的原始联系人(即新信息将添加到现有联系人)。

“分配”部分是这样完成的 - Data 中的每一行都有一列 RAW_CONTACT_ID 告诉联系人应用程序此信息属于哪个原始联系人,并且每一行RawContacts 有一列 CONTACT_ID 告诉联系人应用 Contacts 这个原始联系人属于哪一行。

因此,要获取与 _ID = 1234 联系的信息,您可以先从 Contacts_ID = 1234 查询信息,然后从 RawContactsCONTACT_ID = 1234 查询更多信息,然后从 Data 查询更多信息,其中 RAW_CONTACT_ID IN (X) 其中 X 是您之前找到的原始联系人 ID 列表。

Data table 还有一个 CONTACT_ID 列,所以你基本上可以跳过 RawContact 查询,并获取所有数据(电话,电子邮件等) .) 直接来自联系人 ID。

希望已经清楚了。