¿Cómo obtener el nombre y el apellido de los contactos de Android?

¿Cómo obtener los siguientes campos de los contactos de Android? He utilizado Android 2.2.

  1. Prefijo del nombre
  2. Nombre de pila
  3. Segundo nombre
  4. Apellido
  5. Prefijo del nombre
  6. Nombre fonético
  7. Segundo nombre fonético
  8. Apellido fonético

Busque la clase ContactsContract.CommonDataKinds.StructuredName . Usted puede encontrar allí todas las columnas que usted está buscando. Intente algo como esto:

  String whereName = ContactsContract.Data.MIMETYPE + " = ?"; String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; Cursor nameCur = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); while (nameCur.moveToNext()) { String given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); String family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); String display = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); } nameCur.close(); 

Devuelve todos los nombres de los contactos. Para ser más preciso, puede agregar un identificador de contacto como un parámetro adicional a la consulta – obtendrá la dirección de un contacto en particular.

Para un contacto especificado puede hacer esto:

 String whereName = ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = ?"; String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contact_ID }; Cursor nameCur = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); while (nameCur.moveToNext()) { String given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); String family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); String display = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); } nameCur.close(); 

Intente utilizar este código para obtener la información necesaria sobre el contacto, el código está aquí:

 import android.provider.ContactsContract.Contacts; import android.database.Cursor; // Form an array specifying which columns to return, you can add more. String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Email }; Uri contacts = ContactsContract.Contacts.CONTENT_LOOKUP_URI; // id of the Contact to return. long id = 3; // Make the query. Cursor managedCursor = managedQuery(contacts, projection, // Which columns to return null, // Which rows to return (all rows) // Selection arguments (with a given ID) ContactsContract.Contacts._ID = "id", // Put the results in ascending order by name ContactsContract.Contacts.DISPLAY_NAME + " ASC"); 

Como el otro ejemplo (sólo por diversión), pero para buscar el nombre de contacto de un solo usuario:

 // A contact ID is fetched from ContactList Uri resultUri = data.getData(); Cursor cont = getContentResolver().query(resultUri, null, null, null, null); if (!cont.moveToNext()) { Toast.makeText(this, "Cursor contains no data", Toast.LENGTH_LONG).show(); return; } int columnIndexForId = cont.getColumnIndex(ContactsContract.Contacts._ID); String contactId = cont.getString(columnIndexForId); // Fetch contact name with a specific ID String whereName = ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = " + contactId; String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; Cursor nameCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); while (nameCur.moveToNext()) { String given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); String family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); String display = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); Toast.makeText(this, "Name: " + given + " Family: " + family + " Displayname: " + display, Toast.LENGTH_LONG).show(); } nameCur.close(); cont.close(); 

Algunos enlaces para empezar, además de las sugerencias de Raunak:

Experimentando con los ContactsContract.Data.CONTENT_URI a finales de 2015 en la melcocha. No puedo obtener los campos GIVEN_NAME o similares. Creo que los apis posteriores han desaprobado estos. Ejecute el siguiente código para imprimir las columnas que tiene en su teléfono

 Uri uri = ContactsContract.Data.CONTENT_URI; String selection = ContactsContract.Data.MIMETYPE + " = ?"; String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}; Cursor cursor = contentResolver.query( uri, // URI representing the table/resource to be queried null, // projection - the list of columns to return. Null means "all" selection, // selection - Which rows to return (condition rows must match) selectionArgs, // selection args - can be provided separately and subbed into selection. null); // string specifying sort order if (cursor.getCount() == 0) { return; } Log.i("Count:", Integer.toString(cursor.getCount())); // returns number of names on phone while (cursor.moveToNext()) { // Behold, the firehose! Log.d(TAG, "-------------------new record\n"); for(String column : cursor.getColumnNames()) { Log.d(TAG, column + ": " + cursor.getString(cursor.getColumnIndex(column)) + "\n"); } } 

prueba esto,

 public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); try { if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor cur = managedQuery(contactData, null, null, null, null); ContentResolver contect_resolver = getContentResolver(); if (cur.moveToFirst()) { String id = cur.getString(cur.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String name = ""; String no = ""; Cursor phoneCur = contect_resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); if (phoneCur.moveToFirst()) { name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); no = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } Log.e("Phone no & name :***: ", name + " : " + no); txt.append(name + " : " + no + "\n"); id = null; name = null; no = null; phoneCur = null; } contect_resolver = null; cur = null; // populateContacts(); } } catch (IllegalArgumentException e) { e.printStackTrace(); Log.e("IllegalArgumentException::", e.toString()); } catch (Exception e) { e.printStackTrace(); Log.e("Error :: ", e.toString()); } } 

Compruebe aquí hay código de ejemplo exactamente para eso: http://developer.android.com/guide/topics/ui/layout/listview.html

  • Autocompletar con nombre y número como en aplicaciones de sms nativas Android
  • Integrar mi aplicación con el contacto
  • ContentObserver para los cambios de contacto de escucha
  • Cómo registrarse para escuchar cualquier cambio de contacto en android
  • Obtener número de teléfono para varios destinatarios en android
  • Cómo mostrar datos de la lista Array a Custom ArrayAdapter
  • Cómo reaccionar a los nuevos contactos en la aplicación Contactos de Android
  • Java.lang.IllegalStateException: intenta volver a abrir un objeto ya cerrado: android.database.sqlite.SQLiteQuery
  • Buscar contactos en la aplicación Android
  • Cargando la imagen de contacto a través de LOOKUP_KEY y método de conveniencia openContactPhotoInputStream
  • Busque contactos usando el nombre así como la empresa (como en la aplicación predeterminada de contactos de Android 2.3.3)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.