How to get contact email id?

I have a list of all the contact names in the phone. I want to get the email id (if there is a contact) of the contact that I click in the list. How can i do this?

+5
source share
5 answers

Use the following code to get all email IDs. I checked the code. He works.

public static void getContactEmails(Context context) { String emailIdOfContact = null; int emailType = Email.TYPE_WORK; String contactName = null; ContentResolver cr = context.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(BaseColumns._ID)); contactName = cur .getString(cur .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // Log.i(TAG,"....contact name....." + // contactName); cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); Cursor emails = cr.query(Email.CONTENT_URI, null, Email.CONTACT_ID + " = " + id, null, null); while (emails.moveToNext()) { emailIdOfContact = emails.getString(emails .getColumnIndex(Email.DATA)); // Log.i(TAG,"...COntact Name ...." // + contactName + "...contact Number..." // + emailIdOfContact); emailType = emails.getInt(emails .getColumnIndex(Phone.TYPE)); } emails.close(); } }// end of contact name cursor cur.close(); } 
+25
source

Phone numbers

Phone numbers are stored in their own table and must be requested separately. To query the phone number table, use the URI stored in the ContactsKontract.CommonDataKinds.Phone.CONTENT_URI SDK variable. Use WHERE to get the phone numbers for the specified contact.

 if (Integer.parseInt(cur.getString( cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); while (pCur.moveToNext()) { // Do something with phones } pCur.close(); } 

Run the second query to the SQLite database for Android contacts. Phone numbers are requested against the URIs stored in ContactsContract.CommonDataKinds.Phone.CONTENT_URI. The contact ID is stored in the phone table as ContactsContract.CommonDataKinds.Phone.CONTACT_ID, and the WHERE clause is used to limit the data returned.

Email Addresses

Requesting email addresses is similar to phone numbers. To obtain email addresses from the database, you must complete the request. Request the URI stored in ContactsContract.CommonDataKinds.Email.CONTENT_URI to request an email address table

 Cursor emailCur = cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null); while (emailCur.moveToNext()) { // This would allow you get several email addresses // if the email addresses were stored in an array String email = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); String emailType = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); } emailCur.close(); 
+5
source
 Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI,Uri.encode(name.toString().trim())); Cursor mapContact = getContext().getContentResolver().query(uri, new String[]{PhoneLookup._ID}, null, null, null); if(mapContact.moveToNext()) { String _id = mapContact.getString(mapContact.getColumnIndex(ContactsContract.Contacts._ID)); } 
0
source

Xamarin version of Sunil's answer. Took me a little, but I figured it out.

 ContentResolver cr = ContentResolver; string contactName = null; var cur = cr.Query(ContactsContract.Contacts.ContentUri,null,null,null,null); if (cur.MoveToFirst()) { do { string id = cur.GetString(cur.GetColumnIndex(BaseColumns.Id)); contactName = cur.GetString(cur.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.DisplayName)); var emails = cr.Query(ContactsContract.CommonDataKinds.Email.ContentUri, null, ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId + " = " + id, null, null); if (emails.MoveToFirst()) { do { // This is where it loops through if there are multiple Email addresses var email = emails.GetString(emails.GetColumnIndex(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Data)); } while (emails.MoveToNext()); } } while (cur.MoveToNext()); } 
0
source

I am using the code below. It works fine. checked it out.

 ArrayList<ContactInfo> listContactsData = new ArrayList<>(); // Retrieve Email address Cursor emailCursor = cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null); while (emailCursor.moveToNext()) { // This would allow you get email addresses String email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); String emailType = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); Log.e("Email :"," "+email) objContact.strEmail = email; } emailCur.close(); listContactsData.add(objContact); 
0
source

Source: https://habr.com/ru/post/901977/


All Articles