2012-04-12 17 views
49

मैं केवल उन संपर्क नामों को प्रदर्शित करना चाहता हूं जिनके ईमेल पते मौजूद हैं। अन्यथा संपर्क नाम सूची में प्रदर्शित नहीं किया जाना चाहिए। मैं यह कैसे कर सकता हूँ? क्या कोई मेरी मदद कर सकता हैं?संपर्क सूची से केवल ईमेल पता प्राप्त करें Android

उत्तर

62
public ArrayList<String> getNameEmailDetails(){ 
     ArrayList<String> names = new ArrayList<String>(); 
     ContentResolver cr = 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)); 
        Log.e("Name :", name); 
        String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
        Log.e("Email", email); 
        if(email!=null){ 
         names.add(name); 
        } 
       } 
       cur1.close(); 
      } 
     } 
     return names; 
    } 

उपर्युक्त विधि नामों की एक सरणी सूची लौटाती है जिसमें ईमेल आईडी है।

+0

अरे धन्यवाद बहुत –

+0

मुझे ArrayList में संपर्क नाम और ईमेल पता मिल रहा है। मैंने लॉग बिल्ली में इस तरह देखा: नाम: [email protected], ईमेल: [email protected], नाम: [email protected], ईमेल: [email protected], नाम: xyz, ईमेल: xyz @ gmail। मतलब है कि मुझे संपर्क नाम में नाम और ईमेल पता का मिश्रण मिल रहा है :( –

+0

इस वैकल्पिक कामकाजी उत्तर को आजमाएं –

0

यदि आप पहले ही संपर्क और उनके ईमेल पते (यदि यह मौजूद है) प्राप्त कर सकते हैं, तो आप अपनी सूची से कोई ईमेल पता नहीं वाले संपर्कों को क्यों हटाते हैं?

एंड्रॉइड संपर्क API पर अधिक जानकारी के लिए here देखें।

+0

अरे धन्यवाद IrAndroid। हाँ मैं केवल यही कर रहा हूँ। लेकिन मुझे सभी संपर्क नाम मिल रहे हैं। क्या आप कृपया मुझे इसके लिए कुछ कोड दिखा सकते हैं? –

+0

यहां आप जो पूछ रहे हैं उसके लिए एक समान प्रश्न है: http://stackoverflow.com/questions/5205999/android-get-a-cursor-only-with-contacts-that-have-an-email-listed-android-2 -0। – lrAndroid

+0

अरे मैंने इस लिंक पर दिए गए कोड को आजमाया। लेकिन मुझे ईमेल पता मिल रहा है। नाम नहीं यदि ईमेल पता मौजूद है तो मैं संपर्क नाम प्राप्त करना चाहता हूं। क्या आप मुझे कुछ कोड दे सकते हैं? ताकि मैं कुछ आइडिया प्राप्त कर सकूं। –

1
if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

       Cursor emailCur = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id},null); 
       while (emailCur.moveToNext()) { 
         String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
         Log.e("Email",name+" "+email); 
        } 
        emailCur.close(); 
       } 

      } 
+0

धन्यवाद फिर से अग्रवाल :) –

109

यहां ईमेल पते खींचने के लिए मेरी सुपर फास्ट क्वेरी है। यह रूप में अन्य उत्तर द्वारा सुझाए गए सभी संपर्क कॉलम खींच की तुलना में बहुत तेजी से होता है ...

public ArrayList<String> getNameEmailDetails() { 
    ArrayList<String> emlRecs = new ArrayList<String>(); 
    HashSet<String> emlRecsHS = new HashSet<String>(); 
    Context context = getActivity(); 
    ContentResolver cr = context.getContentResolver(); 
    String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.Contacts.PHOTO_ID, 
      ContactsContract.CommonDataKinds.Email.DATA, 
      ContactsContract.CommonDataKinds.Photo.CONTACT_ID }; 
    String order = "CASE WHEN " 
      + ContactsContract.Contacts.DISPLAY_NAME 
      + " NOT LIKE '%@%' THEN 1 ELSE 2 END, " 
      + ContactsContract.Contacts.DISPLAY_NAME 
      + ", " 
      + ContactsContract.CommonDataKinds.Email.DATA 
      + " COLLATE NOCASE"; 
    String 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 
      String name = cur.getString(1); 
      String emlAddr = cur.getString(3); 

      // keep unique only 
      if (emlRecsHS.add(emlAddr.toLowerCase())) { 
       emlRecs.add(emlAddr); 
      } 
     } while (cur.moveToNext()); 
    } 

    cur.close(); 
    return emlRecs; 
} 

मैं 'अग्रवाल शंकर' द्वारा प्रदान की कोड की कोशिश की लेकिन इसके बारे में 4 सेकंड ले लिया अपने परीक्षण उपकरण पर संपर्कों पाने के लिए, और इस कोड के बारे में 0.04 सेकंड लिया। यह तेज़ कोड मैंने SaluSafe ऐप में शामिल किया था। Download SaluSafe from google play

+0

अंतिम उत्तर .. इस का उपयोग करना चाहिए –

+0

सुपर फास्ट, दूसरे समाधान के बाद तेजी से। –

+0

यह जवाब होना चाहिए। दूसरा नहीं। +1 – alicanbatur

0

संपर्क सूची से संपर्क ईमेल प्राप्त करने का एक आसान तरीका यहां दिया गया है। आप नीचे दिए गए विधि में उपयोगकर्ता के संपर्क आईडी पारित करने के लिए और की जरूरत है यह आप ईमेल आईडी वापस आ जाएगी अगर

public String getEmail(String contactId) { 
    String emailStr = ""; 
    final String[] projection = new String[]{ContactsContract.CommonDataKinds.Email.DATA, 
      ContactsContract.CommonDataKinds.Email.TYPE}; 

    Cursor emailq = managedQuery(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, ContactsContract.Data.CONTACT_ID + "=?", new String[]{contactId}, null); 

    if (emailq.moveToFirst()) { 
     final int contactEmailColumnIndex = emailq.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); 

     while (!emailq.isAfterLast()) { 
      emailStr = emailStr + emailq.getString(contactEmailColumnIndex) + ";"; 
      emailq.moveToNext(); 
     } 
    } 
    return emailStr; 
} 
और यह भी अगर आप कैसे इस लिंक का अनुसरण करके अपने एप्लिकेशन में संपर्क सूची प्राप्त करने के लिए सीखना चाहते हैं

मौजूद है: show contact list in app android - trinitytuts

2

एक और समाधान। इसमें फोन नंबर, ईमेल, संगठन और यहां तक ​​कि पूरी तरह से कस्टम डेटा भी शामिल है, इसलिए आप ContactsContract.Data.MIMETYPE के साथ फ़िल्टर किए बिना इसका उपयोग नहीं कर सकते हैं। इस डेटाबेस में एक पंक्ति एक निश्चित खाते से संबंधित मान (या मान, इसमें 15 सामान्य कॉलम हैं) रखती है, इसलिए आपको उन्हें स्वयं समूहित करने की आवश्यकता हो सकती है। मुझे इसे स्वत: पूर्ण करने के लिए जरूरी था, इसलिए प्रारूप (प्रति पंक्ति ईमेल) सही था।

संबंधित मुद्दे