Android 编辑联系人信息

最近的项目是关于通讯录的,下面是一些联系人操作的代码。。。。。。

/**
     * 保存个人信息
     */
    private void savaCardData() {
        String name,position,mobilePhone1,mobilePhone2,email,address,company;
        name = mCardName.getText().toString().trim();
        position = mCardPosition.getText().toString().trim();
        mobilePhone1 = mCardMobilePhone.getText().toString().trim();
        mobilePhone2 = mCardMobilePhoneMore.getText().toString().trim();
        String[] phoneArr = {mobilePhone1,mobilePhone2};
        email = mCardEmail.getText().toString().trim();
        company = mCardCompany.getText().toString().trim();
        address = mCardAddress.getText().toString().trim();
        long raw_contact_id = ContactsDBReader.getRawContactId(getContentResolver(), mContactId);
        updateNameInfo(name, raw_contact_id);
        updateJobInfo(company, position, raw_contact_id);
        updateEamilInfo(email, raw_contact_id);
        updateAddressInfo(address, raw_contact_id);
        updatePhoneInfo(phoneArr, raw_contact_id);
        updatePhotoInfo();
}

/**
     * 添加或者更改联系人头像
     */

    private void updatePhotoInfo(){
        if (mCardPhotoByte != null){
            mDBReader.upDateOrInsertContactPhoto(this, mContactId, mCardPhotoByte);
        }
    }


/**
     * 根据 contactId 获得 rawContactId
     * @param cr
     * @param contactId
     * @return
     */
    public static long getRawContactId(ContentResolver cr, long contactId) {
        long rawContactId = -1;
        if (contactId > 0) {
            Cursor c = cr.query(RawContacts.CONTENT_URI, RAWID_VERSION,
                    RAWID_CLAUSE, new String[]{
                            String.valueOf(contactId)
                    }, null);


            try {
                if (c != null && c.getCount() > 0) {
                    c.moveToFirst();
                    rawContactId = c.getLong(0);
                }
            } finally {
                if (c != null) {
                    c.close();
                }
            }
        }


        return rawContactId;
    }


/**
     * 根据 contactId 得到头像
     * @param context
     * @param contactId
     * @return
     */

    public static Bitmap getPhotoByContactId(Context context, final long contactId) {


        Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_URI, Long.toString(contactId));
        Uri photoUri = Uri.withAppendedPath(contactUri,
                Contacts.Data.CONTENT_DIRECTORY);
        Cursor photoCursor = context.getContentResolver().query(photoUri, new String[]{CommonDataKinds.Photo.PHOTO},
                Data.MIMETYPE + "=?", new String[]{
                        CommonDataKinds.Photo.CONTENT_ITEM_TYPE
                }, null);


        photoCursor.moveToFirst();
        Bitmap photo = null;


        if (photoCursor != null && photoCursor.moveToFirst() && !photoCursor.isNull(0)) {
            byte[] photoData = photoCursor.getBlob(0);
            photo = BitmapFactory.decodeByteArray(photoData, 0,
                    photoData.length, null);
        }


        photoCursor.close();
        if (photo == null) return null;


        return photo;
    }


/**
     * 更新邮政地址信息
     * @param address 地址
     * @param raw_contact_id
     */

    private void updateAddressInfo(String address,long raw_contact_id) {
        ContentValues values = new ContentValues();
        if(!"".equals(mOldAddress)){
            values.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, address);
            values.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);
            mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values
                    , ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?"
                    , new String[]{raw_contact_id + "", ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE});
        }else{
            values.put(
                    ContactsContract.Contacts.Data.RAW_CONTACT_ID,
                    raw_contact_id);
            values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
            values.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, address);
            values.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);
            mContext.getContentResolver().insert(
                    ContactsContract.Data.CONTENT_URI, values);
        }
    }


/**
     * 更新邮箱信息
     * @param email 邮箱地址
     * @param raw_contact_id
     */

    private void updateEamilInfo(String email,long raw_contact_id) {
        ContentValues values = new ContentValues();
        if(!"".equals(mOldEmail)){
            values.put(ContactsContract.CommonDataKinds.Email.DATA, email);
            values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
            mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values
                    , ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?"
                    , new String[]{raw_contact_id + "", ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE});
        }else{
            values.put(
                    ContactsContract.Contacts.Data.RAW_CONTACT_ID,
                    raw_contact_id);
            values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
            values.put(ContactsContract.CommonDataKinds.Email.DATA, email);
            values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
            mContext.getContentResolver().insert(
                    ContactsContract.Data.CONTENT_URI, values);


        }
    }


 /**
     * 更新电话信息
     * @param phoneArr 手机号码(最多两个)
     * @param raw_contact_id
     */
    private void updatePhoneInfo(String[] phoneArr,long raw_contact_id) {
        ContentValues values = new ContentValues();
        if(!"".equals(mOldMobilePhone)){
            values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,"");
            values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
            String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ? AND "+ ContactsContract.CommonDataKinds.Phone.TYPE + "= ?";
            String[] whereParams = new String[]{raw_contact_id+"", ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE+""};
            mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI,values,where, whereParams);
            insertMobilePhone(phoneArr, values, raw_contact_id);
        }else{
             insertMobilePhone(phoneArr,values,raw_contact_id);
        }


/**
     * 更新公司信息
     * @param company 公司名称
     * @param position 职位名称
     * @param raw_contact_id
     */
    private void updateJobInfo(String company, String position,long raw_contact_id) {


        ContentValues values = new ContentValues();
//        values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
        if(("".equals(mOldCompany)) && ("".equals(mOldPosition))){
            values.put(
                    ContactsContract.Contacts.Data.RAW_CONTACT_ID,
                    raw_contact_id);
            values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
            values.put(ContactsContract.CommonDataKinds.Organization.TITLE, position);
            values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, company);
            values.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
            mContext.getContentResolver().insert(
                    ContactsContract.Data.CONTENT_URI, values);
        }else{
            values.clear();
            values.put(ContactsContract.CommonDataKinds.Organization.TITLE, position);
            values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, company);
            values.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
            mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI
                    , values
                    ,ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE  + "=?"
                    ,new String[]{raw_contact_id+"", ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE});
        }
    }

/**
     * 更新姓名
     * @param name 姓名
     * @param raw_contact_id
     */
    private void updateNameInfo(String name,long raw_contact_id) {
        ContentValues values = new ContentValues();
        values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,name);
        mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?",
                new String[]{raw_contact_id + "", ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE});
        values.clear();
        // 更新 姓 一般可不需要
        values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,"");
        mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI,values, ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE  + "=?",
                new String[] { raw_contact_id+"", ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE });
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值