Intereting Posts
RecyclerView: выделение выбранного элемента Является ли OpenGL на Android аккумулятором? Android Studio Simple Unit Test не работает Редактор темы AS не показывает предварительный просмотр TextView.setTextSize ведет себя ненормально – Как установить размер текста текстового вида динамически для разных экранов Использование Gradle для разделения внешних библиотек в разделенных файлах dex для решения ограничений метода Dalvik 64k для Android Android Sqlite получить последний идентификатор строки строки Перезагрузка активности при ротации Android Проблема с ионной камерой Cordova с ios 10 Сделать вызов USSD в android Панель навигации Android, накладывающаяся на мой взгляд Как AsyncTask все еще может использовать Activity, если пользователь уже перешел от него? Facebook приглашает в телефонную связь возвращает OK Почему бы не установить CircleImageView для поддержки v4-библиотеки поддержки Android? WindowSoftInputMode = "adjustResize" не работает с полупрозрачным действием / navbar

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

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

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

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; }