Buscar contacto por número de teléfono

En mi aplicación, el usuario escribe un número de teléfono y quiero encontrar el nombre del contacto con ese número de teléfono.

Por lo general, busco los contactos de esta manera:

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

Pero hago esto para acceder a todos los contactos … En esta aplicación, solo quiero obtener el nombre de contacto del número de teléfono dado … ¿Cómo puedo restringir la consulta?

¿O tengo que ir a través de todos los contactos y ver si alguno tiene el número de teléfono dado? Pero creo que esto puede ser muy lento de esta manera …

    Debería echar un vistazo al proveedor recomendado de ContactsContract.PhoneLookup

    Una tabla que representa el resultado de buscar un número de teléfono, por ejemplo, para el identificador de llamadas. Para realizar una búsqueda, debe agregar el número que desea encontrar a CONTENT_FILTER_URI. Esta consulta está altamente optimizada.

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

    Si quieres el código completo:

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