Android中获取联系人列表
创建工具类获取联系人列表
public class ConstactUtils {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public static List<ConstactInfo> getConstacts(Context context){
List<ConstactInfo> infos = new ArrayList<>();
ContentResolver resolver = context.getContentResolver();
/**
* AUTHORITY = "com.android.contacts"
* AUTHORITY_URI = Uri.parse("content://" + AUTHORITY)
* Data.CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "data")
* CONTENT_URI = Uri.withAppendedPath(Data.CONTENT_URI,"phones")
*
* uri = "com.android.contacts/data/phones"
*/
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] data = { ContactsContract.CommonDataKinds.Phone.NUMBER, //电话号码
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, //姓名
ContactsContract.CommonDataKinds.Phone.CONTACT_ID //联系人id
};
Cursor cursor = resolver.query(uri , data , null , null , null, null );
while (cursor.moveToNext()){
String number = cursor.getColumnName(0);
String name = cursor.getColumnName(1);
String id = cursor.getColumnName(2);
ConstactInfo info = new ConstactInfo(id , number , name);
infos.add(info);
}
return infos;
}
/**
* 根据联系人id获取联系人的头像
* @param context
* @param contactsId 联系人id
* @return
*/
public Bitmap getContactsIcon(Context context , String contactsId){
ContentResolver resolver = context.getContentResolver();
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI , contactsId);
//根据指定的uri, 获取指定的联系人头像,这里要求拼接uri, 在公共的Uri基础之上,再拼接具体的联系人ID
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
//打开某个联系人的头像,返回的是inputStream
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
}
创建联系人信息bean类
public class ConstactInfo {
private String number; //手机号
private String name; //姓名
private String contactsId; //联系人id
public ConstactInfo(String contactsId , String number, String name) {
this.number = number;
this.name = name;
this.contactsId = contactsId;
}
@Override
public String toString() {
return "ConstactInfo{" +
"number='" + number + '\'' +
", name='" + name + '\'' +
", contactsId='" + contactsId + '\'' +
'}';
}
}
```
>从系统通讯录获取联系人
```
public void getContacts(){
/*<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/contact" />
<data android:mimeType="vnd.android.cursor.dir/person" />
<data android:mimeType="vnd.android.cursor.dir/phone_v2" />
<data android:mimeType="vnd.android.cursor.dir/phone" />
<data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
<data android:mimeType="vnd.android.cursor.dir/postal-address" />
</intent-filter>*/
//从系统通讯录获取联系人
Intent intent = new Intent();
intent.setAction("android.intent.action.PICK");
//intent.setType("video/*");
intent.setType("vnd.android.cursor.dir/phone_v2");
startActivityForResult(intent , 100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data == null){
return ;
}
//Log.d(TAG, "data===="+data);
// data====Intent { dat=content://com.android.contacts/data/50 flg=0x1 }
ContentResolver resolver = getContentResolver();
String []projection={
ContactsContract.CommonDataKinds.Phone.NUMBER
};
Cursor cursor = resolver.query(data.getData(), projection, null, null, null);
if(cursor.moveToNext()){
String number =cursor.getString(0);
//把数据放到输入框里面显示
mEtNumber.setText(number);
//指定光标所处的位置
mEtNumber.setSelection(number.length());
}
}
读取联系人的权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>