如何从 Android 中的联系人中获取 ContactNumbers 数组的联系人姓名?

Posted

技术标签:

【中文标题】如何从 Android 中的联系人中获取 ContactNumbers 数组的联系人姓名?【英文标题】:How to get the Contact Names of Array of ContactNumbers from Contacts in Android? 【发布时间】:2021-01-06 17:53:45 【问题描述】:

当我需要从 android_CONTACTS 中获取所选号码的联系人姓名时,我有一个要求。

我可以使用 ->

获取特定号码的名称
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));

                Cursor cursor = cr.query(uri, new String[]ContactsContract.PhoneLookup.DISPLAY_NAME, null, null, null);
                if (cursor == null) 
                    return;
                

如何传递数字列表并获取它们各自的名称?

【问题讨论】:

只要您的代码不查询整个联系人数据库,您就可以告诉我。我的意思是我不想要所有联系人,然后执行 if-else 条件来获取联系人。 【参考方案1】:

这是天真的方法:

String[] phones = new String[]  "(212) 555-1111", "(212) 555-2222", "(212) 555-3333";

String selection = Phone.NUMBER + "IN (?,?,?)";
String[] selectionArgs = phones;
String[] projection = new String[]  Phone.NUMBER, Phone.CONTACT_ID, Phone.DISPLAY_NAME ;

Cursor cur = getContentResolver().query(Phone.CONTENT_URI, projection, selection, selectionArgs, null);

DatabaseUtils.dumpCursor(cur); // dumps the cursor to logcat

但是,只有当您输入的电话号码与存储在 ContactsContract DB 中 NUMBER 下的格式完全相同时,这才有效。

您使用的PhoneLookup.CONTENT_FILTER_URI API 的好处是数字的格式无关紧要,它会以您使用的任何格式在数据库中找到它。

要复制类似的内容,您可以尝试使用另一个名为 NORMALIZED_NUMBER 的字段,该字段应始终以名为 E164 的特定格式保存数字。 所以你可以运行这样的查询:

String[] e164_phones = new String[]  "+12125551111", "+12125552222", "+12125553333";

String selection = Phone.NUMBER + "IN (?,?,?)";
String[] selectionArgs = e164_phones; // all phones here must be in e164 format
String[] projection = new String[]  Phone.NUMBER, Phone.CONTACT_ID, Phone.DISPLAY_NAME ;

Cursor cur = getContentResolver().query(Phone.CONTENT_URI, projection, selection, selectionArgs, null);

您可能需要一种方法将此代码转换为 E164 格式的电话号码,请查看this answer then。

【讨论】:

以上是关于如何从 Android 中的联系人中获取 ContactNumbers 数组的联系人姓名?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 中的联系人列表中获取联系人?使用联系提供商

如何从 Android 中的联系人中获取 ContactNumbers 数组的联系人姓名?

如何从android中的单个查询中获取联系人的名字,姓氏,电子邮件ID

如何从 Android 联系人中的联系人 ID 获取只读帐户名称

如何从android中的联系人姓名获取联系人的号码

如何从android中的给定电话号码获取电话号码类型标签