Estoy tratando de encontrar un contacto por nombre para mostrar. El objetivo es abrir este contacto y agregarle más datos (específicamente más números de teléfono), pero me cuesta incluso encontrar el contacto que deseo actualizar.Android - Encontrar un contacto por nombre para mostrar
Este es el código que estoy usando:
public static String findContact(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
}
tengo un contacto llamado "John Johnson", pero el método siempre devuelve "no encontrado". También traté de buscar un contacto con un solo nombre, por lo que no hace diferencia.
Sospecho que hay algún problema con la uri, la selección o los argumentos de selección, porque no pude encontrar ningún ejemplo en línea de buscar contactos con un nombre para mostrar, y parece que el nombre para mostrar es un tipo especial de información, diferente de, por ejemplo, un número de teléfono.
¿Alguna idea de cómo puedo lograr encontrar a John Johnson?
ACTUALIZACIÓN: He encontrado la manera de encontrar un contacto por el nombre de visualización:
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Data.CONTENT_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
Este código devuelve el id de contacto del primer contacto con el nombre de visualización "John Johnson". En mi código original, tenía el uri incorrecto y la selección incorrecta en mi consulta.
Gracias por responder, pero no ayudan a tener proyección nula. El mismo código funciona cuando estoy buscando un número de teléfono, por lo que es posible tener PhoneLookup._ID como proyección, incluso si estoy buscando una coincidencia en otra columna. Si lo he entendido correctamente, la proyección es qué datos desea recuperar de la consulta, no lo que está buscando. Entonces, si configuras la proyección como nula, simplemente estás pidiendo que obtengas todos los datos de los contactos coincidentes que obtienes de tu consulta. –