Поиск по номеру телефона

В моем приложении пользователь пишет номер телефона, и я хочу найти имя контакта с этим номером телефона?

Обычно я ищу контакты следующим образом:

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

Но я делаю это, чтобы получить доступ ко всем контактам … В этом приложении я хочу получить только имя контакта для данного номера … Как я могу ограничить запрос?

Или мне нужно пройти через все контакты и узнать, имеет ли данный номер телефона? Но я считаю, что это может быть очень медленно …

Solutions Collecting From Web of "Поиск по номеру телефона"

Вы должны взглянуть на рекомендуемого поставщика 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; }