android 讀取通訊錄

來源:互聯網
上載者:User

 private ArrayList<ContactBean> getAllContacts() {
        ArrayList<ContactBean> arrayList = new ArrayList<ContactBean>();

        phoneMap = new HashMap<String, Boolean>();
        //擷取本機連絡人
        Cursor cur = getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI,
                null,
                null,
                null,
                ContactsContract.Contacts.DISPLAY_NAME
                        + " COLLATE LOCALIZED ASC");
        if (cur.moveToFirst()) {
            do {
                ContactBean samContact = new ContactBean();
                samContact.setSelected(false);
                int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
                int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                // 獲得連絡人的ID號
                String contactId = cur.getString(idColumn);
                // 獲得連絡人姓名
                String disPlayName = cur.getString(displayNameColumn);
                System.out.println(disPlayName);
                samContact.contactName = disPlayName;
                // 查看該連絡人有多少個電話號碼。如果沒有這傳回值為0
                int phoneCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                if (phoneCount < 1) {
                    continue;
                }
                Cursor phones = getContentResolver().query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = " + contactId, null, null);
                if (phones != null && phones.moveToFirst()) {
                    do {
                        // 遍曆所有的電話號碼
                        String phoneNumber = phones
                                .getString(phones
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        phoneNumber = phoneNumber.trim();
                        phoneNumber = phoneNumber.replaceAll(" ", "");
                        int phoneType = phones
                                .getInt(phones
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                        if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) {
                            Boolean hasAddPhoneNumber = false;
                            hasAddPhoneNumber = phoneMap.get(phoneNumber);
                            if (hasAddPhoneNumber != null && hasAddPhoneNumber) {
                                break;
                            } else {
                                samContact.contactPhoneNumber = phoneNumber;

                                //設定選中
                                if (defaultSelectList != null) {
                                    int count = defaultSelectList.size();
                                    for (int kk = 0; kk < count; kk++) {
                                        if (defaultSelectList.get(kk).getContactPhoneNumber().equals(samContact.getContactPhoneNumber())) {
                                            samContact.setSelected(true);
                                            break;
                                        }
                                    }
                                }

                                arrayList.add(samContact);
                                phoneMap.put(phoneNumber, true);
                            }
                            break;
                        }
                    } while (phones.moveToNext());

                    if (phones != null) {
                        phones.close();
                    }

                }

            } while (cur.moveToNext());
        }

        if (cur != null) {
            cur.close();
        }
        //擷取sim卡連絡人
        Uri uri = Uri.parse("content://icc/adn");
        Cursor cur2 = getContentResolver().query(
                uri,
                null,
                null,
                null,
                ContactsContract.Contacts.DISPLAY_NAME
                        + " COLLATE LOCALIZED ASC");
//        System.out.println("contact num from sim card = "+cur2.getCount());
//        System.out.println("---------------");
        if (cur2 != null && cur2.moveToFirst()) {
            do {
                try {
                    ContactBean samContact = new ContactBean();
                    samContact.setSelected(false);
                    int displayNameColumn = cur2.getColumnIndex(Contacts.People.NAME);
                    int phoneColumn = cur2.getColumnIndex(Contacts.People.NUMBER);

                    String phoneNumber = cur2.getString(phoneColumn);
                    phoneNumber = phoneNumber.trim();
                    phoneNumber = phoneNumber.replaceAll(" ", "");
                    samContact.contactName = cur2.getString(displayNameColumn);
                    if (samContact.contactName == null) {
                        continue;
                    }
                    samContact.contactPhoneNumber = phoneNumber;
                    if (samContact.contactPhoneNumber == null) {
                        continue;
                    }
                    Boolean hasAddPhoneNumber = false;
                    hasAddPhoneNumber = phoneMap.get(samContact.contactPhoneNumber);
                    if (hasAddPhoneNumber != null && hasAddPhoneNumber) {
                        continue;
                    } else {

                        //設定選中
                        if (defaultSelectList != null) {
                            int count = defaultSelectList.size();
                            for (int kk = 0; kk < count; kk++) {
                                if (defaultSelectList.get(kk).getContactPhoneNumber().equals(samContact.getContactPhoneNumber())) {
                                    samContact.setSelected(true);
                                    break;
                                }
                            }
                        }

                        arrayList.add(samContact);
                        phoneMap.put(samContact.getContactPhoneNumber(), true);
                    }
                    arrayList.add(samContact);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } while (cur2.moveToNext());
        }

        if (cur2 != null) {
            cur2.close();
        }

        return arrayList;
    }

public class ContactBean implements Parcelable {
    public String contactName;
    public String contactPhoneNumber;
    private boolean isSelected;

    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }

    public String getContactPhoneNumber() {
        return contactPhoneNumber;
    }

    public void setContactPhoneNumber(String contactPhoneNumber) {
        this.contactPhoneNumber = contactPhoneNumber;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String contactName) {
        this.contactName = contactName;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        int isChecked = isSelected?1:0;
        parcel.writeInt(isChecked);
        parcel.writeString(contactName);
        parcel.writeString(contactPhoneNumber);
    }

    public static final Parcelable.Creator CREATOR = new Creator() {

        @Override
        public ContactBean createFromParcel(Parcel source) {

            // TODO Auto-generated method stub
            ContactBean parcelableObj = new ContactBean();
            parcelableObj.isSelected=source.readInt()==1?true:false;
            parcelableObj.contactName=source.readString();
            parcelableObj.contactPhoneNumber = source.readString();
            return parcelableObj;

        }

        @Override
        public ContactBean[] newArray(int size) {

            return new ContactBean[size];

        }

    };
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.