安卓获取手机通讯录

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);
            }
        }
    }
上一篇下一篇

猜你喜欢

热点阅读