Android 通讯录工具栏

备份在csdn上方便查阅
用于联系人获取,添加,删除,查询等操作。

public class ContactsAccessUtil {
    final static String TAG = "ContactsAccess";
    private final static String PhoneAccountName = "Phone";
    final static String SIMAccountName = "SIM";

    // 读取联系人信息
    public static List<ContactData> getPhoneContacts(Context context, List<ContactData> list) {
        if (list == null)
            list = new ArrayList<ContactData>();
        try {
            ContentResolver contentResolver = context.getContentResolver();
            Cursor cur = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
            if (cur != null && cur.getCount() > 0) {
                ArrayList<String> emailTelPhoneList = new ArrayList<String>();
                ArrayList<String> emailPhoneList = new ArrayList<String>();

                while (cur.moveToNext()) {
                    String id = cur.getString(
                            cur.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cur.getString(cur.getColumnIndex(
                            ContactsContract.Contacts.DISPLAY_NAME));

                    //获取电话号码
                    if (cur.getInt(cur.getColumnIndex(
                            ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
                        emailTelPhoneList =getTelphoneList(context,id);
                    }
                    emailPhoneList = getEmailList(context,id);


                    //添加到列表
                    ContactData data = new ContactData();
                    data.id = id;
                    data.name = name;
                    if (emailTelPhoneList.size()>0){  //我的项目只需要获取第一个联系电话
                        data.number = emailTelPhoneList.get(0);
                    }
                    if (emailPhoneList.size()>0){ //我的项目只需要获取第一个email
                        data.InsertDate =emailPhoneList.get(0);
                    }
                    list.add(data);


                }

            }
            cur.close();
        }catch (Exception e){
            Log.e("getPhoneContacts","getPhoneContacts:"+e);
        }

        return list;
    }

    /**
     * 获取Email
     * @param id Contacts._ID
     * @return
     */
    public static ArrayList<String> getEmailList(Context context,String id){
        ContentResolver contentResolver =context.getContentResolver();
//        ArrayList<String> emailNameList=new ArrayList<String>();
        ArrayList<String> emailPhoneList=new ArrayList<String>();

        //===========获取Email
        Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID+ " = " + id, null, null);
        while (emails.moveToNext())
        {
            // This would allow you get several email addresses
            String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
//            Log.v(name+"==>", emailAddress);
            if ((!emailAddress.equalsIgnoreCase(""))&&(emailAddress.contains("@")))
            {
//                emailNameList.add(name);
                emailPhoneList.add(emailAddress);
//                            emailIndex++;
            }
        }
        emails.close();
        return emailPhoneList;

    }

    public static ArrayList<String> getTelphoneList(Context context,String id){
        ContentResolver contentResolver =context.getContentResolver();
//        ArrayList<String> emailNameList=new ArrayList<String>();
        ArrayList<String> emailPhoneNoList=new ArrayList<String>();

        Cursor pCur = contentResolver.query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                new String[]{id}, null);
        assert pCur != null;
        while (pCur.moveToNext()) {
            String phoneNo = pCur.getString(pCur.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER));//ContactsContract.CommonDataKinds.Email.DATA
            emailPhoneNoList.add(phoneNo);

        }
        pCur.close();


        return emailPhoneNoList;

    }


    public static boolean insertPhoneContact(Context context, ContactData contact) {
        /**
         * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
         * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
         */
        Uri rcUri;
        ContentValues values = new ContentValues();

//            ContentResolver resolver = context.getContentResolver();
        //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
        values.put(ContactsContract.RawContacts.ACCOUNT_NAME, PhoneAccountName);
        values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "null");
        values.put(ContactsContract.Contacts.DISPLAY_NAME, contact.getContactName());
        Uri rawContactUri = context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
        long rawContactId = ContentUris.parseId(rawContactUri);
        contact.setId(rawContactId + "");

        //往data表入姓名数据
        values.clear();
        values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
        values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);//内容类型
        values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getContactName());

//        values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, contact.getInsertDate());//家庭
//        values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getContactName());//家庭

        rcUri = context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

        if (rcUri != null) {
            //往data表入电话数据
            values.clear();
            values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
            values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
            values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getNumber());
            values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
            rcUri = context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);



            //往data表里写入Email的数据
            values.clear();
            values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
            values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
            values.put(ContactsContract.CommonDataKinds.Email.DATA, contact.getInsertDate()+"@palmv.cn");
            values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
            rcUri =context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);


        }


        return (rcUri != null);
    }

    /**
     * 根据contactId删除联系人数据
     * 0失败
     */
    public static int deletePhoneContact(Context context, String name, String contactId) {
        ContentResolver resolver = context.getContentResolver();
        int rc1, rc2;
        //删除data表中数据
        String where = ContactsContract.Data.CONTACT_ID + " =?";
        String[] whereparams = new String[]{contactId};
        rc1 = resolver.delete(ContactsContract.Data.CONTENT_URI, where, whereparams);

        //删除rawContact表中数据
        where = ContactsContract.RawContacts.CONTACT_ID + " =?";
        whereparams = new String[]{contactId};
        rc2 = resolver.delete(ContactsContract.RawContacts.CONTENT_URI, where, whereparams);

        return (rc1 > 0 && rc2 > 0) ? (rc1 + rc2) : 0;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值