内容提供者

1.本地通讯录

1.1.权限

1.2.获取

  • 方案一:ContactsContract.CommonDataKinds.Phone.CONTENT_URI

    优点:速度快,几百,上千联系人读取都保持在毫秒级别

  public static List<Contacts> getContacts(){
        List<Contacts> contacts = new ArrayList<>();
        String[] mContactsProjection = new String[] {
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts.PHOTO_ID
        };

        String contactsId;
        String phoneNum;
        String name;
        ContentResolver cr = MyApplication.getInstance().getContentResolver();
        //查询contacts表中的所有数据  
        Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, mContactsProjection, null, null, null);
        if(cursor.getCount() > 0){
            while (cursor.moveToNext()){
                contactsId = cursor.getString(0);
                phoneNum = cursor.getString(1);
                name = cursor.getString(2);

                Contacts model=new Contacts();
                model.setPhone(phoneNum);
                model.setName(name);
                model.setId(Integer.valueOf(contactsId));
                contacts.add(model);
            }
            }
            return contacts;
    }
  • 方案二:嵌套查询 ContactsContract.Contacts.CONTENT_URI

    缺点:耗时严重,上千条数据耗时几十秒

参考文献

Last updated

Was this helpful?