Android 獲取系統聯繫人並排序

    主要通過ContactsContract.CommonDataKinds.Phone.CONTENT_URI快速讀取全部數據, 直接讀取數據庫中的數據並按拼音排序( 不過按拼音排序只支持api11以上的)

    讀取名字使用了contact表中的顯示

   沒怎麼寫過文章 就直接上代碼了


    public List<SysContact> queryContactsQuicly() {
        Map<Integer, String> IdNameMap = new HashMap<Integer, String>();
        // 讀取所有姓名和id
        long begintime = System.currentTimeMillis();
        Cursor cursor = MyApp.myApp.getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        if ((cursor != null) && (cursor.getCount() > 0)) {
            cursor.moveToFirst();
            int total = cursor.getCount();
            Log.i("vvt", "讀取所有姓名和id total:" + total);
            int displayNameIndex = cursor
                    .getColumnIndex(PhoneLookup.DISPLAY_NAME);
            int contactIdIndex = cursor
                    .getColumnIndex(ContactsContract.Contacts._ID);
            cursor.moveToFirst();
            for (int i = 0; i < total; i++) {
                String displayName = cursor.getString(displayNameIndex);
                int cid = cursor.getInt(contactIdIndex);
                // o.i("vvt","getContact_compare displayname:"+displayName+" id:"+cid);
                IdNameMap.put(cid, displayName);
                cursor.moveToNext();
            }
        }
        cursor.close();
        long endtime0 = System.currentTimeMillis();
        Log.i("vvt", "讀取所有name use:" + (endtime0 - begintime) + "毫秒");

        // 讀取所有號碼
        // ////////////////////////////////////////////////////////////////////////////////
        Map<Integer, Integer> contactMap = new HashMap<Integer, Integer>();
        List<SysContact> tlist = new ArrayList<SysContact>();
        Cursor phones = MyApp.myApp.getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY);
        if (phones != null) {
            int phonecount = phones.getCount();
            int numberIndex = phones
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            int contactidIndex = phones
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
            int pinyinIndex=phones
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY);
             int nameIndex = phones
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            phones.moveToFirst();
            Log.i("vvt", " phonecount:" + phonecount);
            for (int j = 0; j < phonecount; j++) {
                String num = phones.getString(numberIndex);
                int id = phones.getInt(contactidIndex);
                 String name = phones.getString(nameIndex);
                 String pinyin = phones.getString(pinyinIndex);
                if (num != null && !"null".equals(num) && num.length() > 0) {
                    num = num.trim().replace("-", "");
                    if (num.contains(" ")) {
                        num = num.replace(" ", "");
                    }
                    SysContact user = new SysContact();
                    String name0=IdNameMap.get(id);
                    Log.i("vvt","id:"+id+" name:"+name+" num:"+num+" name0:"+name0+" pinyin:"+pinyin);
                    //這裏使用contact表中的name
                    if(!TextUtils.isEmpty(name0)){
                        name=name0;
                    }
                    user.setName(name);
                    user.setContactid(id);
                    user.setPinyin(pinyin);
                    user.setPhone(num);
                    user.addNum(num);
                    if (contactMap.get(id) == null) {
                        List<String> numlist = new ArrayList<String>();
                        numlist.add(num);
                        //numMap.put(id, numlist);
                        tlist.add(user);
                        contactMap.put(id, tlist.size()-1);
                    } else {
                        //numMap.get(id).add(num);
                        int index=contactMap.get(id).intValue();
                        Log.i("vvt","index:"+index+" tlistsize:"+tlist.size());
                        tlist.get(index).addNum(num);
                    }
                }
                phones.moveToNext();
            }
        }
        phones.close();

        long endtime1 = System.currentTimeMillis();
        Log.i("vvt", "讀取所有號碼耗時:" + (endtime1 - endtime0) + "毫秒");
        long endtime2 = System.currentTimeMillis();
        Log.i("vvt", "獲取全部聯繫人耗時:" + (endtime2 - begintime) + "毫秒"+" tlist size:"+tlist.size());
        return tlist;
    }


這是用到的bean

public class SysContact {
    private int contactid ;
    

    public int getContactid() {
        return contactid;
    }

    public void setContactid(int contactid) {
        this.contactid = contactid;
    }

    private String Name = "";
    private String Phone = "";
    private String HomePhone = "";
    private String Company = "";
    private String pinyin = "";
    private String sortkey = "";
    private HashSet<String> phoneList =new HashSet<String>() ;
    public String getSortkey() {
        return sortkey;
    }

    public void setSortkey(String sortkey) {
        this.sortkey = sortkey;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public String getHomePhone() {
        return HomePhone;
    }

    public void setHomePhone(String homePhone) {
        HomePhone = homePhone;
    }

    public String getCompany() {
        return Company;
    }

    public void setCompany(String company) {
        Company = company;
    }

    public String getPinyin() {
        return pinyin;
    }

    public void setPinyin(String pinyin) {
        this.pinyin = pinyin;
    }
    public void addNum(String num){
        if(TextUtils.isEmpty(num)) return;
        phoneList.add(num);
    }
}


發佈了8 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章