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

问题描述

当我需要从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);
                if (cursor == null) {
                    return;
                }

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

解决方法

这是幼稚的方法:

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,null);

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...