Android 中的 ContactsContract 概览

Posted

技术标签:

【中文标题】Android 中的 ContactsContract 概览【英文标题】:ContactsContract Overview in Android 【发布时间】:2021-03-05 11:00:38 【问题描述】:

我刚刚浏览了 android 中的 ContactsContract API,我被它的概述部分卡住了。

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

你们中的任何人都可以向我提供链接或解释什么是联系人,从 Android 的角度来看,对我来说,这只是我们保存在手机上的号码,但我现在知道它还有更多意义。请向我解释(或提供一个更简单或更清晰的解释的链接,而不是 android 文档本身)这三个表包含什么,因为我无法从文档中理解它。

    ContactsContract.Contacts 表 ContactsContract.RawContacts 表 ContactsContract.Data 表

提前致谢。

【问题讨论】:

【参考方案1】:

正如我之前在许多答案中所写的那样:

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

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

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

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 表也有一个CONTACT_ID 列,所以你基本上可以跳过RawContact 查询,直接从contact-id 中获取所有数据(电话、电子邮件等)。

希望这很清楚。

【讨论】:

谢谢,正是我正在寻找的那种解释。

以上是关于Android 中的 ContactsContract 概览的主要内容,如果未能解决你的问题,请参考以下文章

android 6中的android webview youtube视频中的全屏模式问题

android权限--android开发中的权限及含义(上)

FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?

Android - 将参数传递给 Android 应用程序中的 RESTful URL

Android 中的 ContactsContract 概览

android布局中的tag怎么用