¿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.
- Prefijo del nombre
- Nombre de pila
- Segundo nombre
- Apellido
- Prefijo del nombre
- Nombre fonético
- Segundo nombre fonético
- Apellido fonético
- No se puede insertar los contactos de android mediante programación en el dispositivo de Android
- ¿Cómo funcionan las columnas unidas implícitas con los datos de los contactos de Android?
- Android: contacto de búsqueda basado en número de teléfono
- People API de google versus API de contactos
- Actualizar imagen de contacto en el proveedor de contactos de Android
- Android SDK: código fuente de Contact ContentProvider
- Cómo actualizar una foto de contacto nativa en android?
- ¿Puedo realizar esta consulta de Android con ContentResolver.query ()? (LEFT JOIN y CASE)
- Editar nombre / número de teléfono de contacto programáticamente
- Descripción de la arquitectura de los contactos de Android
- Obtener contactos de un grupo especificado en android
- Android: Iniciador de la selección de contactos | No se puede instanciar el tipo Uri
- ¿Cómo evitar el nombre de contacto duplicado (datos) mientras se carga la información de contacto a listview?
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:
- http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/
- Cómo obtener todos los detalles de un contacto en Android
- http://developer.android.com/resources/samples/ContactManager/index.html
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
- Android – ¿Crear SMS de la API despreciada de PDU?
- TabLayout no rellena el ancho cuando tabMode se establece en 'scrollable'