Obtenir uniquement l’adresse e-mail de la liste de contacts Android

Je souhaite afficher uniquement les noms de contact dont l’adresse électronique est présente. Sinon, ce nom de contact ne doit pas être affiché dans la liste. Comment puis-je faire ceci? Quelqu’un peut-il m’aider s’il vous plaît?

public ArrayList getNameEmailDetails(){ ArrayList names = new ArrayList(); ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { Ssortingng id = cur.getSsortingng(cur.getColumnIndex(ContactsContract.Contacts._ID)); Cursor cur1 = cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new Ssortingng[]{id}, null); while (cur1.moveToNext()) { //to get the contact names Ssortingng name=cur1.getSsortingng(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); Log.e("Name :", name); Ssortingng email = cur1.getSsortingng(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); Log.e("Email", email); if(email!=null){ names.add(name); } } cur1.close(); } } return names; } 

La méthode ci-dessus renvoie une liste de noms qui ont un identifiant de messagerie.

Voici ma requête super rapide pour extraire des adresses électroniques. C’est beaucoup plus rapide que de tirer toutes les colonnes de contact comme suggéré par d’autres réponses …

 public ArrayList getNameEmailDetails() { ArrayList emlRecs = new ArrayList(); HashSet emlRecsHS = new HashSet(); Context context = getActivity(); ContentResolver cr = context.getContentResolver(); Ssortingng[] PROJECTION = new Ssortingng[] { ContactsContract.RawContacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_ID, ContactsContract.CommonDataKinds.Email.DATA, ContactsContract.CommonDataKinds.Photo.CONTACT_ID }; Ssortingng order = "CASE WHEN " + ContactsContract.Contacts.DISPLAY_NAME + " NOT LIKE '%@%' THEN 1 ELSE 2 END, " + ContactsContract.Contacts.DISPLAY_NAME + ", " + ContactsContract.CommonDataKinds.Email.DATA + " COLLATE NOCASE"; Ssortingng filter = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''"; Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, order); if (cur.moveToFirst()) { do { // names comes in hand sometimes Ssortingng name = cur.getSsortingng(1); Ssortingng emlAddr = cur.getSsortingng(3); // keep unique only if (emlRecsHS.add(emlAddr.toLowerCase())) { emlRecs.add(emlAddr); } } while (cur.moveToNext()); } cur.close(); return emlRecs; } 

J’ai essayé le code fourni par ‘Agarwal Shankar’ mais il m’a fallu environ 4 secondes pour obtenir des contacts sur mon périphérique de test, et ce code a pris environ 0,04 seconde.

Une autre solution.

 private static final Uri URI_CONTACT_DATA = ContactsContract.Data.CONTENT_URI; private static final Ssortingng COLUMN_EMAIL = ContactsContract.CommonDataKinds.Email.ADDRESS; private static final Ssortingng COLUMN_DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME_PRIMARY; private static final Ssortingng COLUMN_MIMETYPE = ContactsContract.Data.MIMETYPE; private static final Ssortingng[] PROJECTION = { COLUMN_DISPLAY_NAME, COLUMN_EMAIL, COLUMN_MIMETYPE }; private Cursor getCursor() { ContentResolver resolver = context.getContentResolver(); Ssortingng selection = COLUMN_MIMETYPE + "=?"; final Ssortingng[] selectionArgs = {ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE}; return resolver.query(URI_CONTACT_DATA, PROJECTION, selection, selectionArgs, null); } 

Le problème est que la table de ContactsContract.Contacts.CONTENT_URI contient la firebase database de contacts entière . Cela inclut les numéros de téléphone, les e-mails, les organisations et même les données entièrement personnalisées. Vous ne pouvez donc pas l’utiliser sans filtrage avec ContactsContract.Data.MIMETYPE . Une ligne de cette firebase database contient une valeur (ou des valeurs, elle contient 15 colonnes génériques) liées à un compte donné. Vous devrez donc peut-être les regrouper vous-même. J’avais besoin de cela pour compléter automatiquement les emails, donc le format (email par ligne) était parfait.

 if (cur.getCount() > 0) { while (cur.moveToNext()) { Ssortingng id = cur.getSsortingng(cur.getColumnIndex(ContactsContract.Contacts._ID)); Ssortingng name = cur.getSsortingng(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); Cursor emailCur = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new Ssortingng[]{id},null); while (emailCur.moveToNext()) { Ssortingng email = emailCur.getSsortingng( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); Log.e("Email",name+" "+email); } emailCur.close(); } } 

Si vous pouvez déjà obtenir les contacts et leur adresse e-mail (si elle existe), pourquoi ne supprimez-vous pas simplement les contacts sans adresse e-mail de votre liste?

Voir ici pour plus d’informations sur l’API Android Contacts.

Voici un moyen simple d’obtenir l’identifiant du contact de la liste de contacts. Vous devez transmettre l’identifiant de contact de l’utilisateur dans la méthode ci-dessous et il vous retournera l’identifiant de messagerie s’il existe

  public Ssortingng getEmail(Ssortingng contactId) { Ssortingng emailStr = ""; final Ssortingng[] projection = new Ssortingng[]{ContactsContract.CommonDataKinds.Email.DATA, ContactsContract.CommonDataKinds.Email.TYPE}; Cursor emailq = managedQuery(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, ContactsContract.Data.CONTACT_ID + "=?", new Ssortingng[]{contactId}, null); if (emailq.moveToFirst()) { final int contactEmailColumnIndex = emailq.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); while (!emailq.isAfterLast()) { emailStr = emailStr + emailq.getSsortingng(contactEmailColumnIndex) + ";"; emailq.moveToNext(); } } return emailStr; } 

Et aussi, si vous voulez apprendre comment obtenir une liste de contacts dans votre application, suivez ce lien: afficher la liste des contacts dans l’application Android – sortingnitytuts