2017-01-26 1 views
0

J'utilise cette méthode pour obtenir des adresses e-mail:Comment récupérer toutes les adresses e-mail enregistrées dans Gmail?

ContentResolver cr = SelectFile.this.getContentResolver(); 
      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
      if (cur.getCount() > 0) { 
       while (cur.moveToNext()) { 
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
        Cursor cur1 = cr.query(
          ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
          ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
          new String[]{id}, null); 
        while (cur1.moveToNext()) { 
         //to get the contact names 
         String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
         String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
         ItemEmailSuggestion item = new ItemEmailSuggestion(email,name,id); 
         emailsContacts.add(item); 
         Log.i("CONTACTS",email+" "+name); 
        } 
        cur1.close(); 
       } 
      } 

(source de Get only email address from contact list Android)

afin de proposer une liste de courrier selon l'entrée dans un editText.

Ma mise en œuvre fonctionne, mais la liste des adresses mail obtenues est beaucoup moins fournie que celle des mails enregistrés dans l'application Gmail.

Pourquoi?

Bien sûr, les autorisations sont accordées correctement (READ_CONTACT).

Je n'ai malheureusement plus de terminal sous kitkat, mais il me semble me rappeler que ce n'était pas le cas et que la liste était comparable à celle de Gmail.

Actuellement testé sous android 21,22,23,24.

vous remercie à l'avance

Répondre

0

Tous les e-mails stockés sur le périphérique appartiennent à des contacts réels avec des noms, vous pouvez essayer d'interroger tous les e-mails directement à partir de la table des e-mails, et si cela fonctionne, votre pouvez remplir des noms pour ceux qui ont des noms dans une deuxième requête.

 cr.query(Email.CONTENT_URI,null, null, null, null); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String email = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       Log.i("CONTACTS",email); 
      } 
      cur.close(); 
     }