android 读取系统通讯录

在manifest添加以下权限

<uses-permission android:name="android.permission.READ_CONTACTS" />
 
 
 
 

/**
     * 获取通讯录列表
     * @param s 查询条件,null时为查询所有联系人。
     *          s = "刘"则查询所有包含刘字的联系人
     */
    private void getCallList(final String s) {
        //新开线程,防止通讯录太多联系人,卡顿
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME,
                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                        ContactsContract.CommonDataKinds.Phone.PHOTO_ID,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
                Cursor cursor;
                if (s!=null){
                    //设置查询条件
                    String selection = ContactsContract.PhoneLookup.DISPLAY_NAME + " like '%" + s
                            + "%' or " + ContactsContract.CommonDataKinds.Phone.NUMBER + " like '%" + s + "%'";
                    //ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY 这个参数是让查询结果按字母排序
                    cursor = getContext().getContentResolver()
                            .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    cols, selection, null, ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY);
                }else {
                    cursor = getContext().getContentResolver()
                            .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    cols, null, null, ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY);
                }
                int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
                int contactIdFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
                int numberFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int photoFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_ID);
                for (int i = 0; i < cursor.getCount(); i++) {
                    cursor.moveToPosition(i);
                    String name = cursor.getString(nameFieldColumnIndex);//联系人名称
                    Long contactId = cursor.getLong(contactIdFieldColumnIndex);//联系人ID
                    Long photoId = cursor.getLong(photoFieldColumnIndex);//联系人头像ID
                    String phoneNum = cursor.getString(numberFieldColumnIndex);//联系人手机号
                    Log.i("Msg","name:"+name);
                    Log.i("Msg","contactId:"+contactId);
                    Log.i("Msg","photoId:"+photoId);
                    Log.i("Msg","phoneNum:"+phoneNum);
                    //在此处执行相应的存储操作,之后会查询下一条联系人信息
                }
                cursor.close();
                //此处执行查询完毕要执行的操作,若要更新UI,要使用handle
            }
        });
        thread.start();
  

可以通过头像id和联系人id获取联系人的头像
private Bitmap getBitmap(Long photoId, Long contactId) {
        Bitmap contactPhoto;//photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
        if(photoId > 0 ) {
            Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactId);
            InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), uri);
            contactPhoto = BitmapFactory.decodeStream(input);
        }else {
            contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.icon_shareapp);
        }
        return contactPhoto;
    }




猜你喜欢

转载自blog.csdn.net/m940034240/article/details/77769497
今日推荐