在android中为联系人选择多个号码中的SUPER PRIMARY或PRIMARY号码

时间:2017-01-02 11:00:34

标签: android contacts

获取电话簿中所有联系人的列表。某些联系人可能有多个号码(例如,号码类型为MOBILE,HOME,WORK,HOME_FAX ....)。当我选择所有联系人列表时,它会返回与特定联系人ID相对应的所有号码。

我需要的是如何为所有联系人选择默认号码( IS_SUPER_PRIMARY )。如果默认联系人号码不可用,则它会检索主要( IS_PRIMARY )联系人,但不应为同一联系人ID提供多个联系人号码。

    ContentResolver cr = getActivity().getContentResolver();

            String selection;
            String[] select = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER, ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.Contacts.STARRED};
            if (isFav) {
                selection = "starred=1";
            } else {
                selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
                        + ("1") + "'";
            }

            String sortOrder =   ContactsContract.Contacts.DISPLAY_NAME
                    + " COLLATE LOCALIZED ASC";
            Cursor cur = cr.query(
                    ContactsContract.Contacts.CONTENT_URI, select, selection
                            + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER
                            + "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated


List<ContactItem> contactList = new ArrayList<>();

        try {
            if (cur != null && cur.getCount() > 0) {
                while (cur.moveToNext()) {
                    int id = cur.getInt(
                            cur.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cur.getString(cur.getColumnIndex(
                            ContactsContract.Contacts.DISPLAY_NAME));
                    String image = cur.getString(cur.getColumnIndex(
                            ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
                    int favState = cur.getInt(cur.getColumnIndex(
                            ContactsContract.Contacts.STARRED));

                    if (cur.getInt(cur.getColumnIndex(
                            ContactsContract.Contacts.HAS_PHONE_NUMBER)) >= 1) {
                        String[] selectOnly = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY, ContactsContract.CommonDataKinds.Phone.IS_PRIMARY};

                        Cursor pCur = cr.query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                selectOnly,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? ",
                                new String[]{String.valueOf(id)}, null);

                        while (pCur != null && pCur.moveToNext()) {

                            ContactItem item = new ContactItem();

                            String phoneNo = pCur.getString(pCur.getColumnIndex(
                                    ContactsContract.CommonDataKinds.Phone.NUMBER));
                            int phoneType = pCur.getInt(pCur.getColumnIndex(
                                    ContactsContract.CommonDataKinds.Phone.TYPE));


                            item.setId(id);
                            item.setImage(image);
                            item.setName(name);
                            item.setNumber(phoneNo);
                            item.setType(phoneType);
                            item.setIsStarred(favState);
                            contactList.add(item);

                        }
                        if (pCur != null)
                            pCur.close();
                    }
                }
            }
            if (cur != null)
                cur.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

0 个答案:

没有答案