如何从 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