¿Cómo llamar a la lista de contactos de Android?

10 minutos de lectura

¿Como llamar a la lista de contactos de Android
tam n

Estoy creando una aplicación para Android y necesito llamar a la lista de contactos del teléfono. Necesito llamar a la función de lista de contactos, elegir un contacto y luego regresar a mi aplicación con el nombre del contacto. Aquí está el código que conseguí en Internet, pero no funciona.

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class Contacts extends ListActivity {

    private ListAdapter mAdapter;
    public TextView pbContact;
    public static String PBCONTACT;
    public static final int ACTIVITY_EDIT=1;
    private static final int ACTIVITY_CREATE=0;

    // Called when the activity is first created. 
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
        startManagingCursor(C);

        String[] columns = new String[] {People.NAME};
        int[] names = new int[] {R.id.row_entry};

        mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
        setListAdapter(mAdapter);
    } // end onCreate()
    // Called when contact is pressed
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Cursor C = (Cursor) mAdapter.getItem(position);
        PBCONTACT = C.getString(C.getColumnIndex(People.NAME));

        // RHS 05/06
        //pbContact = (TextView) findViewById(R.id.myContact);
        //pbContact.setText(new StringBuilder().append("b"));

        Intent i = new Intent(this, NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }
}

  • ¿Podría arreglar la sección de código para incluir la primera parte del código: import android.app.ListActivity…

    – David Vidrio

    13 de diciembre de 2009 a las 3:27

  • 1.6 y 2.2 Ejemplos de esto: coderanch.com/t/512048/Android/Mobile/Contact-API

    – Blundell

    26 de junio de 2011 a las 16:04

  • tratar extractor de contactos android. Una pequeña biblioteca simple y fácil de usar.

    – Nitesh Tiwari

    13 de mayo de 2017 a las 6:52

1646962812 689 ¿Como llamar a la lista de contactos de Android
Reto Meier

No estoy 100% seguro de lo que se supone que debe hacer su código de muestra, pero el siguiente fragmento debería ayudarlo a ‘llamar a la función de lista de contactos, elegir un contacto y luego regresar a [your] app con el nombre del contacto’.

Hay tres pasos en este proceso.

1. Permisos

Agregue un permiso para leer datos de contactos en el manifiesto de su aplicación.

<uses-permission android:name="android.permission.READ_CONTACTS"/>

2. Llamar al selector de contactos

Dentro de su Actividad, cree un Intent que le pida al sistema que busque una Actividad que pueda realizar una acción SELECCIONAR de los elementos en el URI de Contactos.

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

Llamada startActivityForResultpasando este Intent (y un número entero de código de solicitud, PICK_CONTACT en este ejemplo). Esto hará que Android inicie una actividad registrada para admitir ACTION_PICK sobre el People.CONTENT_URIluego regrese a esta actividad cuando se realice (o cancele) la selección.

startActivityForResult(intent, PICK_CONTACT);

3. Escuchar el resultado

También en su Actividad, anule el onActivityResult método para escuchar el retorno de la actividad ‘seleccionar un contacto’ que inició en el paso 2. Debe verificar que el código de solicitud devuelto coincida con el valor que espera y que el código de resultado sea RESULT_OK.

Puede obtener la URI del contacto seleccionado llamando getData() sobre el datos Parámetro de intención. Para obtener el nombre del contacto seleccionado, debe usar ese URI para crear una nueva consulta y extraer el nombre del cursor devuelto.

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
  super.onActivityResult(reqCode, resultCode, data);

  switch (reqCode) {
    case (PICK_CONTACT) :
      if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c =  getContentResolver().query(contactData, null, null, null, null);
        if (c.moveToFirst()) {
          String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
          // TODO Whatever you want to do with the selected contact name.
        }
      }
      break;
  }
}

Código fuente completo: tutorials-android.blogspot.com (cómo llamar a la lista de contactos de Android).

  • parece que gran parte de este código ha quedado obsoleto con las recientes API de Android. ¿Alguien tiene una versión actualizada?

    – batata

    23 de julio de 2010 a las 20:03

  • P: Si quiero iniciar una subactividad al elegir un contacto (para que tengamos una forma de volver a la lista de contactos), ¿funcionaría Intent.ACTION_PICK? Estoy empezando a pensar que tengo que mover mi propio cursor y usar setListAdapter, como en la pregunta principal. Mmm …

    – Joe D’Andrea

    24 de septiembre de 2010 a las 23:42

  • Nada está mal aquí… no necesita el permiso de contacto de LECTURA ya que el usuario tiene el control aquí. La aplicación en sí no lee internamente los contactos, sino que muestra una lista de contactos. Solo cuando el usuario selecciona un contacto (acción manual), la aplicación es capaz de recuperar un conjunto limitado de datos asociados con esa información de contacto.

    – ddewaele

    5 de abril de 2012 a las 17:18


  • Pude permitir que el usuario eligiera un contacto sin permiso de LECTURA en mi teléfono Android 4.0+ pero no en 1.6. ¿Alguien sabe en qué versión surgió esta funcionalidad?

    – amit

    22 de julio de 2012 a las 7:05

  • PICK_CONTACT me está fallando. ¿Cómo lo inicializaste?

    – usuario3104760

    20 mayo 2016 a las 15:22

¿Como llamar a la lista de contactos de Android
Colin MacKenzie-III

Lo hago de esta manera para el lanzamiento de Android 2.2 Froyo: básicamente uso eclipse para crear una clase como: clase pública SomePickContactName extiende Actividad

luego inserte este código. Recuerde agregar las variables de clase privada y las CONSTANTES a las que se hace referencia en mi versión del código:

protected void onCreate(Bundle savedInstanceState) 
{
  super.onCreate(savedInstanceState);       
  Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
  startActivityForResult(intentContact, PICK_CONTACT);
}//onCreate

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{

  if (requestCode == PICK_CONTACT)
  {         
    getContactInfo(intent);         
    // Your class variables now have the data, so do something with it. 
  }
}//onActivityResult

protected void getContactInfo(Intent intent)
{

   Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);      
   while (cursor.moveToNext()) 
   {           
       String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
       name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

       String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

       if ( hasPhone.equalsIgnoreCase("1"))
           hasPhone = "true";
       else
           hasPhone = "false" ;

       if (Boolean.parseBoolean(hasPhone)) 
       {
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
        while (phones.moveToNext()) 
        {
          phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        }
        phones.close();
       }

       // Find Email Addresses
       Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);
       while (emails.moveToNext()) 
       {
        emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
       }
       emails.close();

    Cursor address = getContentResolver().query(
                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = " + contactId,
                null, null);
    while (address.moveToNext()) 
    { 
      // These are all private class variables, don't forget to create them.
      poBox      = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
      street     = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
      city       = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
      state      = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
      postalCode = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
      country    = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
      type       = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
    }  //address.moveToNext()   
  }  //while (cursor.moveToNext())        
   cursor.close();
}//getContactInfo

  • La aplicación se bloquea cuando se intenta obtener el correo electrónico por segunda vez. Editar: si alguien más recibe el mismo error, simplemente elimine “cursor.close();” stackoverflow.com/questions/9696868/…

    – alicanbatur

    6 de diciembre de 2013 a las 9:42


Si busca una solución API de nivel 5 que utilice la API ContactsContract, puede modificar ligeramente el código anterior con lo siguiente:

  Intent intent = new Intent(Intent.ACTION_PICK);
  intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
  startActivityForResult(intent, PICK_CONTACT);

Y luego en onActivityResult use el nombre de la columna:

  ContactsContract.Contacts.DISPLAY_NAME

  • ¿Qué hay para mostrar números de teléfono de contacto?

    -Usman Masood

    12 de mayo de 2010 a las 15:58

  • No existen tales clases en Android 1.6. He encontrado nombres similares en Contacts.ContactMethods pero solo tengo excepciones (no puedo encontrar tal actividad). Pero el código de Reto funciona bien.

    – davs

    8 de noviembre de 2010 a las 20:14

1646962813 373 ¿Como llamar a la lista de contactos de Android
Mayur Bhola

Aquí está el fragmento de código para obtener contacto:

package com.contact;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class GetContactDemoActivity extends Activity implements OnClickListener {

private Button btn = null;
private TextView txt = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btn = (Button) findViewById(R.id.button1);
    txt = (TextView) findViewById(R.id.textView1);

    btn.setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
    if (arg0 == btn) {
        try {
            Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intent, 1);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("Error in intent : ", e.toString());
        }
    }
}

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

}

        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        {
        String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
        String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        }

¿Como llamar a la lista de contactos de Android
takrl

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{
  if (requestCode == PICK_CONTACT && intent != null) //here check whether intent is null R not
  {  
  }
}

porque sin seleccionar ningún contacto dará una excepción. así que mejor verificar esta condición.

1646962814 946 ¿Como llamar a la lista de contactos de Android
Foizul Karim

El código completo se da a continuación.

    package com.testingContect;

    import android.app.Activity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.provider.Contacts.People;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class testingContect extends Activity implements OnClickListener{
    /** Called when the activity is first created. */

    EditText ed;
    Button bt;
    int PICK_CONTACT;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt=(Button)findViewById(R.id.button1);
        ed =(EditText)findViewById(R.id.editText1);
        ed.setOnClickListener(this);
        bt.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {

        switch(v.getId())
        {
        case R.id.button1:

            break;
        case R.id.editText1:
             Intent intent = new Intent(Intent.ACTION_PICK);
              intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
              startActivityForResult(intent, PICK_CONTACT);


            break;

        }

    }
    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    {

      if (requestCode == PICK_CONTACT)
      {         
          Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);
          cursor.moveToNext();
          String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
           String  name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

          Toast.makeText(this, "Contect LIST  =  "+name, Toast.LENGTH_LONG).show(); 
      }
    }//onActivityResult
}//class ends

  • ¿Dónde se inicializa PICK_CONTACT?

    –Edward Falk

    6 de diciembre de 2012 a las 6:56

  • Debe declararse en la parte superior de la clase de actividad: private static final int PICK_CONTACT = 1;.

    – Omar

    30 de junio de 2015 a las 13:28

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad