3

我正在尝试使用他们的电话和电子邮件详细信息获取联系人列表,以将它们显示在列表中。我现在所做的是做三个单独的查询。

  1. 从 Contacts.CONTENT_URI 获取到 contactCursor 的联系人列表
  2. 从 Phone.CONTENT_ITEM_TYPE 获取所有电话号码到 phoneCursor
  3. 从 Email.CONTENT_ITEM_TYPE 获取所有电子邮件到 emailCursor

然后我将循环通过contactCursor。对于每个联系人,我将遍历 phoneCursor 和 emailCursor 以获取主要电话号码和电子邮件。但这需要一些时间来加载,并且在联系人数量很大时清晰可见。有什么方法可以让我在第一步中获得所有这些细节。

下面是代码片段:

    Cursor contacts = resolver.query(Contacts.CONTENT_URI, 
            CONTACT_PROJECTION, Contacts.HAS_PHONE_NUMBER + " != 0", null, Contacts._ID + " ASC");
    Cursor phone = resolver.query(Data.CONTENT_URI, PHONE_PROJECTION, 
            Data.MIMETYPE + "=? ", 
            new String[]{Phone.CONTENT_ITEM_TYPE}, 
            Data.CONTACT_ID + " ASC");

    Cursor email = resolver.query(Data.CONTENT_URI, EMAIL_PROJECTION, 
            Data.MIMETYPE + "=? ", 
            new String[]{Email.CONTENT_ITEM_TYPE}, 
            Data.CONTACT_ID + " ASC");

    if (contacts!=null && contacts.moveToFirst()) {
        do {

            String contactId = contacts.getString(0);

            if(phone!=null && phone.moveToFirst()){
                do{
                    if(contactId.equalsIgnoreCase(phone.getString(0))){
                        contact.setMobile(phone.getString(1));

                        break;
                    }
                }while(phone.moveToNext());
            }

            if(email!=null && email.moveToFirst()){
                do{
                    if(contactId.equalsIgnoreCase(email.getString(2))){
                        contact.setEmailWork(email.getString(1));
                        break;
                    }
                }while(email.moveToNext());
            }



        } while (contacts.moveToNext());
4

1 回答 1

-1

下面是获取所有联系人(包括电子邮件)的代码。

private void getContacts() {
        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();
        StringBuilder addbuffer = null;
        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();
            }
        }
    }
于 2013-09-06T06:40:21.210 回答