美文网首页Android联系人问题
Android调用系统通讯录获取联系人姓名和号码(包括同一联系人

Android调用系统通讯录获取联系人姓名和号码(包括同一联系人

作者: 哈达拉进来了 | 来源:发表于2017-07-25 16:36 被阅读2742次

    首先使用下面代码启动系统通讯录:

     Intent intent=new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    
    startActivityForResult(intent,1000);
    

    在Intent中我传入了ContactsContract.CommonDataKinds.Phone.CONTENT_URI个值,代表的是显示联系人的电话号码列表,即使同一姓名下多个号码也都显示出来。
    还有其他值可供选择:
    1、ContactsContract.Contacts.CONTENT_URI显示联系人列表,但是并不显示号码,因此如果传这个值的话,如果一个姓名下有多个号码的话,我们需要在onActivityResult()方法中自己取到所有号码。
    2、StructuredPostal.CONTENT_URI显示原始联系人的邮政地址列表。
    3、Email.CONTENT_URI显示原始联系人的电子邮件地址列表。

    接下来继续看代码:

    
     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode==1000){
                if (resultCode==RESULT_OK){
                    if (data!=null){
                        Uri uri=data.getData();
                         String[] contact=getPhoneContacts(uri);
                        if (contact!=null){
                            String name=contact[0];//姓名
                            String number=contact[1];//手机号
                        }
                    }
                }
            }
        }
    
     /**
         * 读取联系人信息
         * @param uri
         */
        private String[] getPhoneContacts(Uri uri){
            String[] contact = new String[2];
            //得到ContentResolver对象
            ContentResolver cr = getContentResolver();
            Cursor cursor = cr.query(uri, null, null, null, null);
            if (cursor != null&&cursor.moveToFirst()) {
                //取得联系人姓名
                int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                contact[0] = cursor.getString(nameFieldColumnIndex);
                contact[1]=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                Log.i("contacts",contact[0]);
                Log.i("contactsUsername",contact[1]);
                cursor.close();
            } else {
                return null;
            }
            return contact;
        }
    
    /**
         * 去掉手机号内除数字外的所有字符
         *
         * @param phoneNum 手机号
         * @return
         */
        private String formatPhoneNum(String phoneNum) {
            String regex = "(\\+86)|[^0-9]";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(phoneNum);
            return matcher.replaceAll("");
        }
    

    相关文章

      网友评论

        本文标题:Android调用系统通讯录获取联系人姓名和号码(包括同一联系人

        本文链接:https://www.haomeiwen.com/subject/qtowkxtx.html