Cómo acceder a contactos en mi programa android

Estoy realizando una aplicación de mensajes de texto y deseo acceder a contactos en mi aplicación de Android.

Quiero acceder a contactos como si estuvieran en la lista de contactos real. Cuando esté seleccionado necesito volver a mi actividad en la que puedo enviar un SMS a esa persona. ¿O es posible acceder a la base de datos en la que se almacenan los contactos?

Mi código se muestra a continuación:

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); String no = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

Mi LogCat se ve así:

 09-07 12:46:15.458: DEBUG/AndroidRuntime(473): Shutting down VM 09-07 12:46:15.458: WARN/dalvikvm(473): threadid=1: thread exiting with uncaught exception (group=0x40015560) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): FATAL EXCEPTION: main 09-07 12:46:15.478: ERROR/AndroidRuntime(473): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-512D3F3D533B/1 flg=0x1 (has extras) }} to activity {task.list/task.list.Msgactivity}: java.lang.IllegalArgumentException: column 'data1' does not exist 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.access$2000(ActivityThread.java:117) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.os.Handler.dispatchMessage(Handler.java:99) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.os.Looper.loop(Looper.java:123) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.main(ActivityThread.java:3683) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at java.lang.reflect.Method.invokeNative(Native Method) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at java.lang.reflect.Method.invoke(Method.java:507) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at dalvik.system.NativeStart.main(Native Method) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): Caused by: java.lang.IllegalArgumentException: column 'data1' does not exist 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at task.list.Msgactivity.onActivityResult(Msgactivity.java:99) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528) 09-07 12:46:15.478: ERROR/AndroidRuntime(473): ... 11 more 09-07 12:46:15.489: WARN/ActivityManager(61): Force finishing activity task.list/.Msgactivity 

¿Alguien puede ayudarme?

Utilice este código para seleccionar contacto:

  Button button = (Button)findViewById(R.id.pickcontact); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT); } }); @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 = managedQuery(contactData, null, null, null, null); if (c.moveToFirst()) { String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (hasPhone.equalsIgnoreCase("1")) { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); phones.moveToFirst(); String cNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); // Toast.makeText(getApplicationContext(), cNumber, Toast.LENGTH_SHORT).show(); setCn(cNumber); } } } } } 

Consulte estos enlaces:

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

Cómo obtener contactos de la libreta de direcciones nativa en android

Cómo obtener todos los detalles de un contacto en Android

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

Cómo importar contactos de la agenda a nuestra aplicación

Extracción de contactos de Android

Cómo obtener todos los contactos de Android, pero sin los que están en SIM

http://mobile.tutsplus.com/tutorials/android/android-essentials-using-the-contact-picker/

Prueba este código. Esto almacena todos los contactos en el ArrayList

 ArrayList<HashMap<String,String>> contactData=new ArrayList<HashMap<String,String>>(); ContentResolver cr = getContentResolver(); Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); while (cursor.moveToNext()) { try{ String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); while (phones.moveToNext()) { String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); HashMap<String,String> map=new HashMap<String,String>(); map.put("name", name); map.put("number", phoneNumber); contactData.add(map); } phones.close(); } }catch(Exception e){} } 

Si desea almacenar el contacto específico, use la condición if.

  • Cómo generar Vcard del contacto seleccionado desde la aplicación de contactos predeterminada
  • Acceder a contactos y obtener dirección de correo electrónico
  • ¿Cómo eliminar un contacto?
  • Android: Nuevo registro de datos se agrega al contacto incorrecto
  • Android: Biblioteca de chips para la selección de contactos
  • Recuperar la foto y el nombre de los contactos de android
  • Cargar foto de contacto en un rendimiento de vista de lista
  • Cómo ocultar mi Administrador de Acount personalizado desde la interfaz de usuario de configuración
  • ¿Cómo puedo agregar una imagen de contacto dentro de ContentProviderOperation?
  • Cómo agregar un contacto a un grupo android
  • Recuperar el apodo del contacto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.