首先使用下面代碼啟動(dòng)系統(tǒng)通訊錄:
Intent intent=new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent,1000);
在Intent中我傳入了
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
個(gè)值,代表的是顯示聯(lián)系人的電話號(hào)碼列表吨枉,即使同一姓名下多個(gè)號(hào)碼也都顯示出來(lái)叨粘。
還有其他值可供選擇:
1咸这、ContactsContract.Contacts.CONTENT_URI
顯示聯(lián)系人列表,但是并不顯示號(hào)碼焰枢,因此如果傳這個(gè)值的話王财,如果一個(gè)姓名下有多個(gè)號(hào)碼的話忆矛,我們需要在onActivityResult()
方法中自己取到所有號(hào)碼察蹲。
2、StructuredPostal.CONTENT_URI
顯示原始聯(lián)系人的郵政地址列表催训。
3洽议、Email.CONTENT_URI
顯示原始聯(lián)系人的電子郵件地址列表。
接下來(lái)繼續(xù)看代碼:
@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];//手機(jī)號(hào)
}
}
}
}
}
/**
* 讀取聯(lián)系人信息
* @param uri
*/
private String[] getPhoneContacts(Uri uri){
String[] contact = new String[2];
//得到ContentResolver對(duì)象
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, null, null, null, null);
if (cursor != null&&cursor.moveToFirst()) {
//取得聯(lián)系人姓名
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;
}
/**
* 去掉手機(jī)號(hào)內(nèi)除數(shù)字外的所有字符
*
* @param phoneNum 手機(jī)號(hào)
* @return
*/
private String formatPhoneNum(String phoneNum) {
String regex = "(\\+86)|[^0-9]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(phoneNum);
return matcher.replaceAll("");
}