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
查询信息,然后从RawContacts
CONTACT_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