Android:检索联系人的姓名,电话号码,电子邮件,生日 [英] Android: Retrieve Name, Phone Number, Email, Birthday from Contact

查看:80
本文介绍了Android:检索联系人的姓名,电话号码,电子邮件,生日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只得到名字&生日,请使用以下代码.但我需要电话号码和电子邮件也.如果有人可以帮助我,那将是很棒的.谢谢.

I am getting only name & birthday using the code below. But I need phone number & email also. It would be great if anyone can help me out. Thanks.

private void getContacts() {
    Uri uri = ContactsContract.Data.CONTENT_URI;

    String[] projection = new String[]{
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Event.CONTACT_ID,
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Email.DATA,
            ContactsContract.CommonDataKinds.Event.START_DATE
    };

    String where = ContactsContract.Data.MIMETYPE + "= ? AND " +
            ContactsContract.CommonDataKinds.Event.TYPE + "=" +
            ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
    String[] selectionArgs = new String[]{
            ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
    };
    String sortOrder = null;
    ContentResolver contentResolver = this.getActivity().getContentResolver();
    Cursor cursor = contentResolver.query(uri, projection, where, selectionArgs, sortOrder);

    int nameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    int numberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    int emailColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
    int bithDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE);
    while (cursor.moveToNext()) {
        String name = cursor.getString(nameColumn);
        String number = cursor.getString(numberColumn);
        String email = cursor.getString(emailColumn);
        String birthDay = cursor.getString(bithDayColumn);
        Log.d(TAG, "Birthday: " + birthDay);
    }
}

推荐答案

在您的投影中,您将查询限制为仅MIMETYPE CommonDataKinds.Event.CONTENT_ITEM_TYPE的行,因此您只会得到生日.

In your projection you're limiting your query to rows of MIMETYPE CommonDataKinds.Event.CONTENT_ITEM_TYPE only, so you'll only get birthdays.

您需要询问电子邮件和电话的模仿类型,但请注意,这些其他信息将在同一联系人的不同行中显示. 例如,对于具有2个电话,3封电子邮件和一个生日的联系人A,您的光标会得到6个结果.因此,您需要使用CONTACT_ID字段将它们分组在一起.

You need to ask for emails and phones mimetypes, but note that these additional information will come in separate rows for the same contact. For example, for contact A that has 2 phones, 3 emails and a birthday, you'll get 6 results in your cursor. So you need to group them all together using the CONTACT_ID field.

下面是简单的代码,可以帮助您入门,打印生成的HashMap,并为每个联系人获得他/她的所有姓名,电子邮件,电话和生日:

Here's simple code to get you started, print the resulting HashMap and you'll get for each contact all his/hers name, emails, phones and birthday:

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

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 + "', '" + Event.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 / birthday / email)
    String data = cur.getString(3); // the actual info, e.g. +1-212-555-1234

    String kind = "unknown";

    switch (mime) {
        case Phone.CONTENT_ITEM_TYPE: 
            kind = "phone"; 
            break;
        case Event.CONTENT_ITEM_TYPE: 
            kind = "birthday";
            break;
        case Email.CONTENT_ITEM_TYPE: 
            kind = "email";
            break;
    }
    Log.d(TAG, "got " + id + ", " + name + ", " + kind + " - " + data);

    // add info to existing list if this contact-id was already found, or create a new list in case it's new
    List<String> infos;
    if (contacts.containsKey(id)) {
        infos = contacts.get(id);
    } else {
        infos = new ArrayList<String>();
        infos.add("name = " + name);
        contacts.put(id, infos);
    }
    infos.add(kind + " = " + data);
}

这篇关于Android:检索联系人的姓名,电话号码,电子邮件,生日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆