Как получить письмо от контакта - PullRequest
0 голосов
/ 01 октября 2018

Этот код работает нормально для получения имени и телефона, но я не знаю, как получить электронную почту из этого кода.Вот мой код:

public static ArrayList<ContentValues> getContactDetails(final Context mContext){
ArrayList<ContentValues> contactList = new ArrayList<ContentValues>();


String order = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC";
Cursor managedCursor = mContext.getContentResolver().query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
        null, order);

int _number = managedCursor
        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int _name = managedCursor
        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
int _id = managedCursor
        .getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID);



while (managedCursor.moveToNext()) {

    ContentValues values = new ContentValues();
    Contact mContact = new Contact();


        values.put(ContactClass.CONTACT_NAME, managedCursor.getString(_name));
        values.put(ContactClass.CONTACT_MOBILE_NUMBER, managedCursor.getString(_number).replaceAll("\\s+",""));
        mContact.setPhNo(managedCursor.getString(_number).replaceAll("\\s+",""));
        mContact.setName(managedCursor.getString(_name));

        contactList.add(values);
        serverContactList.add(mContact);

    }
}

return contactList;

}

здесь я хочу получить письмо и добавить в список serverContactList.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018
  1. Никогда не используйте managedCursor.
  2. Запрашивайте Data.CONTENT_URI вместо Phone.CONTENT_URI, чтобы получить доступ ко всем элементам данных (включая Phone и Email и другие, если необходимо)
  3. Ограничить запрос по MIMETYPE только нужными вам элементами


Map<Long, Contact> contacts = new HashMap<>();

String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3};

// query only emails/phones/events
String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "', '" + Email.CONTENT_ITEM_TYPE + "')";
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null);

while (cur != null && cur.moveToNext()) {
    long id = cur.getLong(0);
    String name = cur.getString(1); // full name
    String mime = cur.getString(2); // type of data (phone / email)
    String data = cur.getString(3); // the actual info, e.g. +1-212-555-1234

    Log.d(TAG, "got " + id + ", " + name + " - " + data);

    // add info to existing list if this contact-id was already found, or create a new list in case it's new
    Contact contact;
    if (contacts.containsKey(id)) {
        contact = contacts.get(id);
    } else {
        contact = new Contact();
        contacts.put(id, contact);
        contact.setName(name);
    }
    if (mime == Phone.CONTENT_ITEM_TYPE) {
        contact.setPhNo(data);
    } else {
        contact.setEmail(data);
    }
}
0 голосов
/ 01 октября 2018

Я отредактировал ваш код, добавьте остальную часть кода в 2 задачи.

public static ArrayList<ContentValues> getContactDetails(final Context mContext) { 
    // todo rest of things

    int _id = managedCursor
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID);

    while (managedCursor.moveToNext()) {
        // we will get emails for a contact id
        String id = managedCursor.getString(_id);
        Cursor cur1 = mContext.getContentResolver().query(
                ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                new String[]{id}, null);
        if (cur1 != 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);
            }
        }
        cur1.close();

        // todo rest of things
    }
    return contactList;
}
...