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

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

 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调用系统通讯录获取联系人姓名和号码(包括同一联系人多个号码))