Android 获取联系人姓名和电话号码信息

ContactsContract 类是存储联系人相关信息的数据库。
获取联系人信息的URL:ContactsContract.Contacts.CONTENT_URI
几个需要用到的字段:

ContactsContract.Contacts.DISPLAY_NAME 获取联系人名字

ContactsContract.Contacts.HAS_PHONE_NUMBER 是否有号码

ContactsContract.Contacts._ID 获取联系人ID(每个联系人名字会有一个唯一对应的ID)

要获取联系人的某些信息,就可以用CommonDataKinds这个类,例如查找联系人的电话号码相关信息(ContactsContract.CommonDataKinds.Phone), ContactsContract.CommonDataKinds.Phone.CONTENT_URI这个URL可以查找所有联系人电话号码的数据。

首先,获取联系人信息表:

 /*ContentResolver ----> This class provides applications access to the content model.*/
        ContentResolver resolver = this.getContentResolver();//获取ContentResolver实例
        //标志你想获取联系人信息的列(这里是,联系人姓名、是否有号码、联系人ID)
        String[] PROJECTION={ ContactsContract.Contacts.DISPLAY_NAME,
                               ContactsContract.Contacts.HAS_PHONE_NUMBER,
                                ContactsContract.Contacts._ID};
        /*需要添加权限--- <uses-permission android:name="android.permission.READ_CONTACTS" /> ---*/
        //获取到整份联系人的表,这份表有以上三列的信息
        Cursor phoneCursor=resolver.query(ContactsContract.Contacts.CONTENT_URI,PROJECTION,null,null,null);

然后,根据唯一的联系人ID,查找对应的电话号码

               //联系人姓名
                String telDisplayName=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                //是否有电话号码:0代表没有,1代表有
                int hasTelNumber=phoneCursor.getInt(phoneCursor.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER));
                //联系人ID
                String contactId=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts._ID));
                 if (!TextUtils.isEmpty(telDisplayName)&&hasTelNumber==1){
                    //查询该联系人的所有电话号码
                    Cursor phoneNumberCursor=resolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId ,null,null);

                    if (phoneNumberCursor!=null){
                        while (phoneNumberCursor.moveToNext()){
                            //获取联系人电话号码,一个联系人可能有多个电话号码
                            String telNumber=phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex
                                    (ContactsContract.CommonDataKinds.Phone.NUMBER));
                            Log.d(TAG, "获取联系人---- Name== "+telDisplayName+"----Number== "+telNumber);
                        }
                    }
                }
            }
                

以下是完整的代码

 /**
     * 获取联系人姓名和电话号码
     */
    private void getContactInfo(){

        List<TelBean> telBeanList=new ArrayList<>();

            /*ContentResolver ----> This class provides applications access to the content model.*/
            ContentResolver resolver = this.getContentResolver();//获取ContentResolver实例
            String[] PROJECTION={ ContactsContract.Contacts.DISPLAY_NAME,
                                   ContactsContract.Contacts.HAS_PHONE_NUMBER,
                                    ContactsContract.Contacts._ID};
            /*需要添加权限--- <uses-permission android:name="android.permission.READ_CONTACTS" /> ---*/
            Cursor phoneCursor=resolver.query(ContactsContract.Contacts.CONTENT_URI,PROJECTION,null,null,null);

        if (phoneCursor!=null){
            while (phoneCursor.moveToNext()){
                TelBean telBean=new TelBean();
                //联系人姓名
                String telDisplayName=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                telBean.setName(telDisplayName);
                //是否有电话号码
                int hasTelNumber=phoneCursor.getInt(phoneCursor.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER));
                //联系人ID
                String contactId=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts._ID));
                Log.d(TAG, "ContactsContract.Contacts._ID: ----"+contactId);
                if (!TextUtils.isEmpty(telDisplayName)&&hasTelNumber==1){
                    //查询该联系人的所有电话号码
                    Cursor phoneNumberCursor=resolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId ,null,null);

                    if (phoneNumberCursor!=null){
                        while (phoneNumberCursor.moveToNext()){
                            //获取联系人电话号码
                            String telNumber=phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex
                                    (ContactsContract.CommonDataKinds.Phone.NUMBER));

                            telBean.setNumber(telNumber);
                            telBeanList.add(telBean);
                            Log.d(TAG, "获取联系人---- Name== "+telDisplayName+"----Number== "+telNumber);
                        }
                    }
                }
            }

            Log.d(TAG, "Contact Count==: "+telBeanList.size());

        }

    }

    private class TelBean {
        private String Name;
        private String Number;

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

        public void setNumber(String number) {
            Number = number;
        }

        public String getName() {
            return Name;
        }

        public String getNumber() {
            return Number;
        }
    }


以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辣椒_Carly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值