You must read the raw contact along with all the data associated with it using the ContactsContract.RawContacts.Entity directory. If the source contact has data rows, the entity cursor will contain a row for each data row. If the raw contact does not have data rows, the cursor will still contain one row with information about the level of the original contact.
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); Cursor c = getContentResolver().query( entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null); try { while (c.moveToNext()) { String sourceId = c.getString(0); if (!c.isNull(1)) { String mimeType = c.getString(2); String data = c.getString(3);
For example, if mimeType is Phone.CONTENT_ITEM_TYPE , then column DATA1 stores the phone number, but if the data type is Email.CONTENT_ITEM_TYPE , then DATA1 stores the email address.
source share