美文网首页
安卓获取手机通讯录

安卓获取手机通讯录

作者: liuweilyy | 来源:发表于2019-07-20 11:45 被阅读0次

    获取通讯录数据

    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);
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:安卓获取手机通讯录

          本文链接:https://www.haomeiwen.com/subject/wuiylctx.html