1

I want get a email for a particular phone number.

Here is my code

private static String getEmailAndName(String number, Context context) {
        String selection = ContactsContract.CommonDataKinds.Phone.NUMBER+" like'%" + number +"%'";
        String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.DATA};
        Cursor c = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, selection, null, null);

        String aniName = "";
        if (c.moveToNext()) {
            aniName = c.getString(0);
            Log.e(TAG, "Name ====== "+c.getString(0));
            Log.e(TAG, "Email ====== "+c.getString(1));
            Log.e(TAG, "Email ====== "+c.getString(2));
        }
        return aniName;
    }

But It does not returns email ID.

Cœur
  • 37,241
  • 25
  • 195
  • 267
Gangadhar Nimballi
  • 1,534
  • 3
  • 18
  • 46

2 Answers2

2

Here is the solution:

public static String[] getContactInfo(String phoneNumber, Context context) {
        String info[] = new String[2];

        ContentResolver mResolver = context.getContentResolver();
        Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));

        Cursor cursor = mResolver.query(uri, new String[] {
                ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID }, null, null, null);

        String contactId = "";
        if (cursor.moveToFirst()) {
            do {
                contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID));
            } while (cursor.moveToNext());
        }

        //Get Name....
        String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME };
        cursor = mResolver.query(ContactsContract.Contacts.CONTENT_URI, projection,
                ContactsContract.Contacts._ID + "=?", new String[]{contactId}, null);

        String name = "";
        if (cursor.moveToFirst()) {
            name = cursor.getString(0);
        }

        //Get Email Address....
        cursor = mResolver.query(
                ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",new String[]{contactId}, null);
        String email="";
        while (cursor.moveToNext())
        {
            email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            int emailType = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
        }
        cursor.close();
        info[0] = name;
        info[1] = email;
        return info;
    }
koteswarao
  • 370
  • 3
  • 15
0

To get the email address stored of a particular contact in phone book. This code works for me:

private Button btn;
private String TAG = "Contacts";
private static final int RESULT_PICK_CONTACT = 1;


btn.setOnClickListener(new View.OnClickListener() {    
    @Override
    public void onClick(View v) {
    selectSingleContact();
    }
});

private void selectSingleContact() {   
    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // check whether the result is ok
    if (resultCode == RESULT_OK) {
        // Check for the request code, we might be usign multiple startActivityForResult
        switch (requestCode) {
            case RESULT_PICK_CONTACT:
                contactPicked(data);
                break;
        }
    } else {
        Log.e("ContactFragment", "Failed to pick contact");
    }
}

private void contactPicked(Intent data) {

    Uri uri = data.getData();
    Log.i(TAG, "contactPicked() uri " + uri.toString());
    Cursor cursor;
    ContentResolver cr = getActivity().getContentResolver();

    try {
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        if (null != cur && cur.getCount() > 0) {
            cur.moveToFirst();
            for (String column : cur.getColumnNames()) {
                Log.i(TAG, "contactPicked() Contacts column " + column + " : " + cur.getString(cur.getColumnIndex(column)));
            }
        }

        if (cur.getCount() > 0) {
          //Query the content uri
            cursor = getActivity().getContentResolver().query(uri, null, null, null, null);

            if (null != cursor && cursor.getCount() > 0) {
                cursor.moveToFirst();
                for (String column : cursor.getColumnNames()) {
                    Log.i(TAG, "contactPicked() uri column " + column + " : " + cursor.getString(cursor.getColumnIndex(column)));
                }
            }

            cursor.moveToFirst();
            id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            Log.i(TAG, "contactPicked() uri id " + id);
            String contact_id = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
            Log.i(TAG, "contactPicked() uri contact id " + contact_id);
            // column index of the contact name
            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            // column index of the phone number
            phoneNo = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            //get Email id of selected contact....
            Log.e("ContactsFragment", "::>> " + id + name + phoneNo);

            Cursor cur1 = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{contact_id}, null);

            if (null != cur1 && cur1.getCount() > 0) {
                cur1.moveToFirst();
                for (String column : cur1.getColumnNames()) {
                    Log.i(TAG, "contactPicked() Email column " + column + " : " + cur1.getString(cur1.getColumnIndex(column)));
                    email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                }
                //Here you get name, number & email...
                Log.e("setcontactDetails","::>>" + name+"\nPhoneno:" + phoneNo+"\nEmail: " + email);
            } else {
                 Log.e("setcontactDetails","::>>" + name+"\nPhoneno:" + phoneNo+"\nEmail: " + email);
            }
        }
    } catch (IndexOutOfBoundsException e) {
        e.printStackTrace();
    }
}

Also add permissions to AndroidManifest.xml

Nikhil
  • 1,212
  • 13
  • 30