Cómo obtener contactos en Android

Estoy desarrollando una aplicación para componer sms en la plataforma android. Para eso necesito conseguir "Contactos", "Contactos Recientes" y "Grupos". Por favor, dígame cualquier tutorial o el código de cómo hacerlo. Al hacer clic en cualquiera de estos tres botones debe haber contactos junto con una casilla de verificación para la selección de múltiples contactos. Gracias.

Aquí está el código para obtener contactos programáticamente

ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); String id = null, name = null, email = null, phone = null, note = null, orgName = null, title = null; String Phone1 = "unknown", Phone2 = "unknown", Phone3 = "unknown", type1 = "unknown", type2 = "unknown", type3 = "unknown"; int size = cur.getCount(); if (cur.getCount() > 0) { int cnt = 1; while (cur.moveToNext()) { email = ""; name = ""; cnt++; id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); name = cur .getString(cur .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); if (name != null && name != "") { if (!checkEmail(name)) { email = ""; } else { email = name; name = ""; } } if (Integer .parseInt(cur.getString(cur .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { System.out.println("name : " + name); Cursor pCur = cr .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); Phone1 = " "; Phone2 = " "; Phone3 = " "; while (pCur.moveToNext()) { String phonetype = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); String MainNumber = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); if (phonetype.equalsIgnoreCase("1")) { Phone1 = MainNumber; type1 = "home"; } else if (phonetype.equalsIgnoreCase("2")) { Phone2 = MainNumber; type2 = "mobile"; } else { Phone3 = MainNumber; type3 = "work"; } } pCur.close(); } Cursor addrCur = cr .query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI, null, ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = ?", new String[] { id }, null); if (addrCur.getCount() == 0) { addbuffer.append("unknown"); } else { int cntr = 0; while (addrCur.moveToNext()) { cntr++; String poBox = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX)); if (poBox == null) { poBox = " "; } String street = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); if (street == null) { street = " "; } String neb = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD)); if (neb == null) { neb = " "; } String city = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); if (city == null) { city = " "; } String state = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); if (state == null) { state = " "; } String postalCode = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); if (postalCode == null) { postalCode = " "; } String country = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); if (country == null) { country = " "; } String type = addrCur .getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); if (type == null) { type = " "; } } } addrCur.close(); String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] noteWhereParams = new String[] { id, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE }; Cursor noteCur = cr.query( ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null); note = " "; if (noteCur.moveToFirst()) { note = noteCur .getString(noteCur .getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); if (note == null) { note = " "; } } noteCur.close(); String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] orgWhereParams = new String[] { id, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE }; Cursor orgCur = cr.query( ContactsContract.Data.CONTENT_URI, null, orgWhere, orgWhereParams, null); orgName = " "; if (orgCur.moveToFirst()) { orgName = orgCur .getString(orgCur .getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY)); } if (orgName == null) { orgName = " "; } orgCur.close(); Cursor emailCur = cr .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { id }, null); email = "unknown"; while (emailCur.moveToNext()) { email = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); String emailType = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); if (email == null) { email = "unknown"; } if (emailType.equalsIgnoreCase("1")) { } else { } } // add emailCur.close(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.