如何解决如何从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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。