Intereting Posts
Активность камеры, при которой uri переходит к нулевому значению при изменении ориентации экрана ViewTreeObserver Слушатель не вызван через некоторое время Android. Можно ли вставлять значения @IntDef внутри @interface? Как добавить прокрутку к целому действию? Как интегрировать функцию шлюза платежей в Android Плагин Android PhoneGap: успешный и неудачный обратный вызов не вызван Изображения недоступны с помощью context.getClassLoader.getResaurceAsStream из андроидной банки в плагине Unity Как я могу установить цвет штриховой шкалы андроидов? (Не цвет звезд, а ГРАНИЦА) Android: как заголовок центра в ToolBar О прогрессе, которое не отображается в приложении DownloadManager android Как установить несколько gridview в том же макете в android? Как сделать текст подходящим для экрана (текстовое обертывание) в WebView с помощью KitKat Android: атрибут видимости в настройках xml не работает? (Android 2.3) Genymotion: как загружать apk каждый раз? Как использовать Parcel.readBooleanArray ()?

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

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

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

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

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

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

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