Android: muestra los contactos de la agenda y selecciona uno

Quiero mostrar la lista de contactos en la agenda telefónica con un clic de un botón y luego seleccionar uno de los contactos de ella y luego recuperar su número de contacto? No quiero hacer mi lista personalizada, ¿hay una manera de usar androides construido en la funcionalidad?

INTENTA ESTO ->

setContentView(R.layout.main); contactNumber = (TextView)findViewById(R.id.contactnumber); Button buttonPickContact = (Button)findViewById(R.id.pickcontact); buttonPickContact.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); startActivityForResult(intent, 1); }}); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(requestCode == RQS_PICK_CONTACT){ if(resultCode == RESULT_OK){ Uri contactData = data.getData(); Cursor cursor = managedQuery(contactData, null, null, null, null); cursor.moveToFirst(); String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); //contactName.setText(name); contactNumber.setText(number); //contactEmail.setText(email); } } } } 

EDIT XML ADDED;

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/pickcontact" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Pick Contact" /> <TextView android:id="@+id/contactnumber" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 
 Intent i=new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(i, PICK_REQUEST); 

El Intent entregado a su método onActivityResult() contendrá el Uri del contacto elegido – obtendrá esto llamando a getData() en ese Intent .

Aquí hay un proyecto de ejemplo que demuestra esto, con la lógica que se está implementando en un fragmento retenido, por lo que se cuelga en el contacto seleccionado a través de cambios de configuración (por ejemplo, el usuario gira la pantalla).

También puedes usar ACTION_GET_CONTENT para esto, y creo que ese es el patrón más moderno, aunque ACTION_PICK ciertamente funciona y es todo lo que tengo código de ejemplo en el momento de escribir esto. Si está leyendo esto en el futuro (hi, future!), Es posible que la muestra vinculada a se haya actualizado para utilizar ACTION_GET_CONTENT .

Veo que esta pregunta es vieja, pero estaba haciendo lo mismo en mi aplicación y pensé en publicar mi código aquí, si eso ayuda a alguien en el futuro.

Esta es la forma de iniciar una nueva intención para mostrar la lista

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

Y esto es cómo procesar el resultado

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_CONTACT) { if (resultCode == RESULT_OK) { Uri contactData = data.getData(); String number = ""; Cursor cursor = getContentResolver().query(contactData, null, null, null, null); cursor.moveToFirst(); String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); String contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); if (hasPhone.equals("1")) { Cursor phones = getContentResolver().query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); while (phones.moveToNext()) { number = phones.getString(phones.getColumnIndex (ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("[-() ]", ""); } phones.close(); //Do something with number } else { Toast.makeText(getApplicationContext(), "This contact has no phone number", Toast.LENGTH_LONG).show(); } cursor.close(); } } } } 

PICK_CONTACT es una constante definida en la clase.

En el emulador del nexo 5x que probé esto:

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); startActivityForResult(intent, 1); 

o:

 Uri uri = Uri.parse("content://contacts"); Intent intent = new Intent(Intent.ACTION_PICK, uri); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(intent, 1); 

No funcionó para todos los contactos. No sé por qué. pero esto:

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

trabajos.

  • Cómo ocultar la barra de título de una actividad en XML con el tema personalizado existente
  • Cómo enviar datos de la Actividad al Fragmento
  • ListView Selección de artículos Android
  • ¿Crea desplazamiento alfabético fácil en ListView?
  • Ciertos estilos de ProgressBar no se muestran en Nexus 5 Android 5.0.1
  • Cómo dar una línea debajo de la vista de texto en android
  • ¿Dónde está el archivo de diseño de mi actividad de configuración?
  • Android: alinear el centro LinearLayout para todos los tamaños de pantalla
  • Cómo rotar vistas sobre el cambio de orientación sin volver a crear el diseño?
  • VectorDrawable: Android carga xhdpi PNG en lugar del recurso vectorial
  • Barra de herramientas para colapsar como Google Play Store
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.