通过电话号码search联系人

在我的应用程序,用户写一个电话号码,我想find该电话号码的联系人姓名?

我通常像这样search联系人:

Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

但我这样做,以访问所有联系人…在这个应用程序,我只想获得给定的电话号码的联系人名称…我怎样才能限制查询?

或者我必须通过所有的联系人,看看有没有给定的电话号码? 但是我相信这样可以很慢…

Solutions Collecting From Web of "通过电话号码search联系人"

您应该看看推荐的ContactsContract.PhoneLookup提供程序

代表查找电话号码结果的表格,例如来电号码。 要执行查找,您必须在CONTENT_FILTER_URI附加要查找的号码。 这个查询是高度优化的。

 Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,... 

如果你想要完整的代码:

 public String getContactDisplayNameByNumber(String number) { Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); String name = "?"; ContentResolver contentResolver = getContentResolver(); Cursor contactLookup = contentResolver.query(uri, new String[] {BaseColumns._ID, ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null); try { if (contactLookup != null && contactLookup.getCount() > 0) { contactLookup.moveToNext(); name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); //String contactId = contactLookup.getString(contactLookup.getColumnIndex(BaseColumns._ID)); } } finally { if (contactLookup != null) { contactLookup.close(); } } return name; }