安卓获取手机通讯录
2019-07-20 本文已影响0人
liuweilyy
获取通讯录数据
1.不要查询所有数据,只查需要的数据,不然速度回很慢。
PHONE_BOOK_LABEL 这个是首字母,
ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY 这个最重要,sortOrder一定要用这个,不然获取到数据有的姓氏顺序会错乱。
ContactsBean 自己定义的实体类,包含姓名、电话、首字母就可以。
public class ContactUtils {
//(实际上就是“sort_key”字段) 出来是首字母
private static final String PHONE_BOOK_LABEL = "phonebook_label";
//需要查询的字段
private static final String[] CONTACTOR_ION = new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
PHONE_BOOK_LABEL
};
public static List<ContactsBean> getAllContacts(Context context) {
List<ContactsBean> contacts = new ArrayList<>();
Uri uri = ContactsContract.CommonDataKinds.Contactables.CONTENT_URI;
//获取联系人。按首字母排序
Cursor cursor = context.getContentResolver().query(uri, CONTACTOR_ION,null,null, ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY);
if (cursor != null) {
while (cursor.moveToNext()) {
ContactsBean info = new ContactsBean();
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String firstChar = cursor.getString(cursor.getColumnIndex(PHONE_BOOK_LABEL));
info.setName(name);
info.setFirstChar(firstChar);
info.setInformation(LwStringUtil.getNoBlankString(phoneNum));
contacts.add(info);
}
cursor.close();
}
return contacts;
}
}
跳转系统通讯录页面
1.跳转代码
// 跳转到联系人界面
Intent intent = new Intent();
intent.setAction("android.intent.action.PICK");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("vnd.android.cursor.dir/phone_v2");
startActivityForResult(intent, 0x30);
2.回调代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==0x30) {
if (data != null) {
Uri uri = data.getData();
String phoneNum = null;
String contactName = null;
// 创建内容解析者
ContentResolver contentResolver = getContentResolver();
Cursor cursor = null;
if (uri != null) {
cursor = contentResolver.query(uri,
new String[]{"display_name","data1"},null,null,null);
}
while (cursor.moveToNext()) {
contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
cursor.close();
// 把电话号码中的 - 符号 替换成空格
if (phoneNum != null) {
phoneNum = phoneNum.replaceAll("-", " ");
// 空格去掉 为什么不直接-替换成"" 因为测试的时候发现还是会有空格 只能这么处理
phoneNum= phoneNum.replaceAll(" ", "");
}
add_sc_name.setText(contactName);
add_sc_model.setText(phoneNum);
}
}
}