android - veo - se borraron los nombres de mis contactos
¿Cómo buscar el nombre de un contacto desde su número de teléfono en Android? (2)
Estoy tratando de obtener el nombre del remitente de la base de datos de contactos utilizando un proveedor de contenido.
El problema es que no sé cómo implementarlo. Como ahora solo puedo extraer el número de teléfono de smsMessage. Necesito verificar si el número de teléfono que está llamando está primero en los contactos de los usuarios y si se muestra el nombre, si no lo está, entonces se muestra el número.
Esto es lo que hice
ContentResolver localContentResolver = this.mContext.getContentResolver();
Cursor contactLookupCursor =
localContentResolver.query(
Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(phoneNumber)),
new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},
null,
null,
null);
try {
while(contactLookupCursor.moveToNext()){
String contactName = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
String contactId = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
Log.d(LOGTAG, "contactMatch name: " + contactName);
Log.d(LOGTAG, "contactMatch id: " + contactId);
}
} finally {
contactLookupCursor.close();
}
Al ingresar su número de teléfono que ya tiene en Uri.encode (número de teléfono)
Sí, esto es posible utilizando ContactsContract.PhoneLookup.CONTENT_FILTER_URI
en Android 2.0 y superior y Contacts.Phones.CONTENT_FILTER_URL
en Android 1.6 y anteriores.
Por ejemplo, uso, consulte la documentación de ContactsContract.PhoneLookup . Extracto de abajo:
// 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, busque el código base de este método . Por cierto, no estoy seguro si es seguro usar esa función directamente en tus propias aplicaciones, pero no lo haría.