如何在Android中获取联系人

4

我正在开发一个在安卓平台上用于组合短信的应用程序。为此,我需要获取“联系人”,“最近联系人”和“群组”。请告诉我如何做到这一点的教程或代码。当我们点击这三个按钮中的任何一个时,应该显示联系人列表,并带有复选框以选择多个联系人。 谢谢。

1个回答

18

这里是以编程方式获取联系人信息的代码:

    ContentResolver cr = getContentResolver();
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
    null, null, null);
  String id = null, name = null, email = null, phone = null, note = null, orgName =     null, title = null;
  String Phone1 = "unknown", Phone2 = "unknown", Phone3 = "unknown", type1 = "unknown",        type2 = "unknown", type3 = "unknown";
  int size = cur.getCount();
if (cur.getCount() > 0) {
    int cnt = 1;
    while (cur.moveToNext())
    {
        email = "";
        name = "";
        cnt++;
        id = cur.getString(cur
                .getColumnIndex(ContactsContract.Contacts._ID));
        name = cur
                .getString(cur
                        .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        if (name != null && name != "") {
            if (!checkEmail(name)) {
                email = "";

            } else {
                email = name;
                name = "";
            }
        }
        if (Integer
                .parseInt(cur.getString(cur
                        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)

        {
            System.out.println("name : " + name);
            Cursor pCur = cr
                    .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = ?", new String[] { id },
                            null);

            Phone1 = " ";
            Phone2 = " ";
            Phone3 = " ";
            while (pCur.moveToNext())
            {
                String phonetype = pCur
                        .getString(pCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                String MainNumber = pCur
                        .getString(pCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                if (phonetype.equalsIgnoreCase("1")) {
                    Phone1 = MainNumber;
                    type1 = "home";
                } else if (phonetype.equalsIgnoreCase("2")) {
                    Phone2 = MainNumber;
                    type2 = "mobile";
                } else {
                    Phone3 = MainNumber;
                    type3 = "work";
                }
            }
            pCur.close();

        }
            Cursor addrCur = cr
                    .query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID
                                    + " = ?", new String[] { id },
                            null);
            if (addrCur.getCount() == 0) {
                addbuffer.append("unknown");
            } else {
                int cntr = 0;
                while (addrCur.moveToNext()) {

                    cntr++;
                    String poBox = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
                    if (poBox == null) {
                        poBox = " ";
                    }
                    String street = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
                    if (street == null) {
                        street = " ";
                    }
                    String neb = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD));
                    if (neb == null) {
                        neb = " ";
                    }
                    String city = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
                    if (city == null) {
                        city = " ";
                    }
                    String state = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
                    if (state == null) {
                        state = " ";
                    }
                    String postalCode = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
                    if (postalCode == null) {
                        postalCode = " ";
                    }
                    String country = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
                    if (country == null) {
                        country = " ";
                    }

                    String type = addrCur
                            .getString(addrCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
                    if (type == null) {
                        type = " ";
                    }
                }

            }

            addrCur.close();

            String noteWhere = ContactsContract.Data.CONTACT_ID
                    + " = ? AND " + ContactsContract.Data.MIMETYPE
                    + " = ?";
            String[] noteWhereParams = new String[] {
                    id,
                    ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE };
            Cursor noteCur = cr.query(
                    ContactsContract.Data.CONTENT_URI, null,
                    noteWhere, noteWhereParams, null);

            note = " ";

            if (noteCur.moveToFirst()) {
                note = noteCur
                        .getString(noteCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));

                if (note == null) {
                    note = " ";
                }
            }
            noteCur.close();
            String orgWhere = ContactsContract.Data.CONTACT_ID
                    + " = ? AND " + ContactsContract.Data.MIMETYPE
                    + " = ?";
            String[] orgWhereParams = new String[] {
                    id,
                    ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE };
            Cursor orgCur = cr.query(
                    ContactsContract.Data.CONTENT_URI, null,
                    orgWhere, orgWhereParams, null);
            orgName = " ";
            if (orgCur.moveToFirst()) {
                orgName = orgCur
                        .getString(orgCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));

            }
            if (orgName == null) {
                orgName = " ";
            }
            orgCur.close();

            Cursor emailCur = cr
                    .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                    + " = ?", new String[] { id },
                            null);
            email = "unknown";
            while (emailCur.moveToNext()) {

                email = emailCur
                        .getString(emailCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                String emailType = emailCur
                        .getString(emailCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

                if (email == null) {
                    email = "unknown";
                }
                if (emailType.equalsIgnoreCase("1")) {
                } else {
                }
            }

            // add
            emailCur.close();

1
这是我应用程序中正在运行的代码。如果您有任何进一步的查询,请问我。 - Harsh Trivedi
checkEmail和addBuffer函数分别是做什么的? - rosu alin
1
@rosualin 的 CheckEmail 方法是用于检查有效的电子邮件地址(电子邮件语法)。 - Harsh Trivedi
10倍,另一个是TextView,设法使其工作,并删除我不需要的代码,我只需要电子邮件,这样就更快了,无需检查电话、地址等数据库。 - rosu alin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接