Sí, esto es posible usando ContactsContract.PhoneLookup.CONTENT_FILTER_URI
en Android 2.0 y superior y Contacts.Phones.CONTENT_FILTER_URL
en Android 1.6 y versiones anteriores.
Por ejemplo de uso, consulte la documentación para ContactsContract.PhoneLookup. Extracto a continuación:
// Android 1.6 and earlier (backwards compatible for Android 2.0+)
Uri uri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber));
// Android 2.0 and later
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
// Query the filter URI
String[] projection = new String[]{ PhoneLookup.DISPLAY_NAME, ...
Cursor cursor = context.getContentResolver().query(uri, projection, ...
ACTUALIZACIÓN: El formato del número de teléfono, no importa. La comparación es robusta y altamente optimizada en Android; se hace usando una función sqlite nativa llamada PHONE_NUMBERS_EQUAL
. Para más detalles, search the codebase for this method. Por cierto, no estoy seguro si es seguro usar esa función directamente en tus propias aplicaciones, pero no lo haría.
Probablemente puede generalizar esta pregunta a algo así como '¿Cómo buscar un contacto dado una cadena de número de teléfono sin formato, sin procesar? ' –