CONTACT_ID 与 ContactsContract.Data 不同

sqlserver

1个回答

写回答

鲸落奶油

2025-07-09 16:55

+ 关注

Android
Android

根据 CONTACT_ID 与 ContactsContract.Data 不同的情况生成文章

在Android开发中,我们经常需要操作联系人信息。而在Android的联系人数据库中,联系人的详细信息是通过CONTACT_ID与ContactsContract.Data进行关联的。联系人的基本信息保存在ContactsContract.Contacts表中,而联系人的其他信息,比如电话号码、电子邮件地址等,则保存在ContactsContract.Data表中。

那么为什么联系人的基本信息和其他信息需要分开保存呢?这是因为一个联系人可能会有多个电话号码、多个电子邮件地址等。通过将联系人的基本信息与其他信息分开保存,可以更好地管理联系人的多种联系方式。

联系人基本信息保存在ContactsContract.Contacts表中

在ContactsContract.Contacts表中,每个联系人都有一个唯一的CONTACT_ID。这个ID可以用来查询联系人的基本信息,比如姓名、头像等。以下是一个查询联系人基本信息的例子:

Java

Cursor cursor = getcontentResolver().query(

ContactsContract.Contacts.CONTENT_URI,

null,

ContactsContract.Contacts._ID + " = ?",

new String[]{String.valueOf(contactId)},

null

);

if (cursor != null && cursor.moveToFirst()) {

String name = cursor.getString(cursor.getcolumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

String photoUri = cursor.getString(cursor.getcolumnIndex(ContactsContract.Contacts.PHOTO_URI));

// 处理联系人基本信息...

}

cursor.close();

在上面的例子中,我们通过查询ContactsContract.Contacts表,并根据CONTACT_ID进行筛选,获取到了联系人的姓名和头像URI。我们可以根据需要对这些信息进行处理,比如显示在界面上。

联系人其他信息保存在ContactsContract.Data表中

与联系人的基本信息不同,联系人的其他信息保存在ContactsContract.Data表中。在这个表中,每一条记录都与一个联系人关联,并且有一个MIME_TYPE字段用来区分不同类型的信息。比如电话号码、电子邮件地址等都有不同的MIME_TYPE。

以下是一个查询联系人电话号码的例子:

Java

Cursor cursor = getcontentResolver().query(

ContactsContract.Data.CONTENT_URI,

null,

ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",

new String[]{String.valueOf(contactId), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE},

null

);

while (cursor != null && cursor.moveToNext()) {

String phoneNumber = cursor.getString(cursor.getcolumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

int phoneType = cursor.getInt(cursor.getcolumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

// 处理电话号码...

}

cursor.close();

在上面的例子中,我们通过查询ContactsContract.Data表,并根据CONTACT_ID和MIME_TYPE进行筛选,获取到了联系人的电话号码。我们可以根据需要对这些信息进行处理,比如存储到列表中。

通过对联系人的基本信息和其他信息进行分开保存,我们可以更好地管理联系人的多种联系方式。通过查询ContactsContract.Contacts表和ContactsContract.Data表,我们可以获取到联系人的基本信息和其他信息,并对其进行处理。

在开发中,我们可以根据具体需求使用ContactsContract.Contacts和ContactsContract.Data提供的API来操作联系人信息,从而实现更丰富的功能。

无论是查询联系人基本信息,还是获取联系人其他信息,我们都可以通过CONTACT_ID与ContactsContract.Data来进行关联,并根据具体的MIME_TYPE进行筛选。这样可以更灵活地处理联系人的各种信息,为用户提供更好的体验。

希望本文对你理解联系人信息的存储与查询有所帮助,也希望能够在你的Android开发中提供一些参考。

参考代码

Java

// 查询联系人基本信息

Cursor cursor = getcontentResolver().query(

ContactsContract.Contacts.CONTENT_URI,

null,

ContactsContract.Contacts._ID + " = ?",

new String[]{String.valueOf(contactId)},

null

);

if (cursor != null && cursor.moveToFirst()) {

String name = cursor.getString(cursor.getcolumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

String photoUri = cursor.getString(cursor.getcolumnIndex(ContactsContract.Contacts.PHOTO_URI));

// 处理联系人基本信息...

}

cursor.close();

// 查询联系人电话号码

Cursor cursor = getcontentResolver().query(

ContactsContract.Data.CONTENT_URI,

null,

ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",

new String[]{String.valueOf(contactId), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE},

null

);

while (cursor != null && cursor.moveToNext()) {

String phoneNumber = cursor.getString(cursor.getcolumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

int phoneType = cursor.getInt(cursor.getcolumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

// 处理电话号码...

}

cursor.close();

通过上述代码示例,我们可以看到如何使用CONTACT_ID与ContactsContract.Data来查询联系人的基本信息和其他信息。根据具体需求,我们可以通过不同的MIME_TYPE筛选出不同类型的信息,并对其进行处理。这样可以更好地操作联系人信息,并实现各种功能的开发。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号