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

¿Cómo obtener los siguientes campos de los contactos de Android? Usé Android 2.2.

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

Mire la clase ContactsContract.CommonDataKinds.StructuredName . Puede encontrar todas las columnas que está buscando. Prueba algo así:

  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 en los contactos. Para ser más preciso, puede agregar una identificación de contacto como un parámetro adicional a la consulta; obtendrá la dirección para un contacto en particular.

Para un contacto específico, 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 usar este código para obtener la información requerida 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 (solo por diversión) pero para obtener 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 comenzar, además de las sugerencias de Raunak:

Experimentando con ContactsContract.Data.CONTENT_URI a finales de 2015 en marshmallow. No puedo obtener GIVEN_NAME o campos similares. Creo que las API posteriores han dejado de usarlas. 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"); } } 

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

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