android联系人操作

1、insert

// 创建一个空的ContentValues
          ContentValues values = new ContentValues();
          // 向RawContacts.CONTENT_URI空值插入,
          // 先获取Android系统返回的rawContactId
          // 后面要基于此id插入值
          Uri rawContactUri = resolver.insert(args.uri, values);
          long rawContactId = ContentUris.parseId(rawContactUri);
          values.clear();
          contact.setId(rawContactId);
          ArrayList<ContentProviderOperation> opsInsert = new ArrayList<>();
          //name
          opsInsert.add(ContentProviderOperation
              .newInsert(ContactsContract.Data.CONTENT_URI)
              .withValue(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId)
              .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
              .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, EnUtils.encryptText(contact.getName()) + EnUtils.CONTACT_PREFIX)
//              .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getName())
              .build());
          //number
          opsInsert.add(ContentProviderOperation
              .newInsert(ContactsContract.Data.CONTENT_URI)
              .withValue(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId)
              .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
              .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, EnUtils.encryptText(contact.getNumber()))
//              .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getNumber())
              .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
              .build());
          //email
          opsInsert.add(ContentProviderOperation
              .newInsert(ContactsContract.Data.CONTENT_URI)
              .withValue(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId)
              .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
//              .withValue(ContactsContract.CommonDataKinds.Email.DATA, contact.getEmail())
              .withValue(ContactsContract.CommonDataKinds.Email.DATA, EnUtils.encryptText(contact.getEmail()))
              .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
              .build());

          //company/position
          opsInsert.add(ContentProviderOperation
              .newInsert(ContactsContract.Data.CONTENT_URI)
              .withValue(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId)
              .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
              .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, EnUtils.encryptText(contact.getCompany()))
//              .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, contact.getCompany())
              .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, EnUtils.encryptText(contact.getPosition()))
//              .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, contact.getPosition())
              .build());

          //address
          opsInsert.add(ContentProviderOperation
              .newInsert(ContactsContract.Data.CONTENT_URI)
              .withValue(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId)
              .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
              .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, EnUtils.encryptText(contact.getAddress()))
//              .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, contact.getAddress())
              .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME)
              .build());

          try {
            args.result = resolver.applyBatch(ContactsContract.AUTHORITY, opsInsert);
            ArrayList<Contact> enContacts1 = ContactFragment.getEnContacts();
            if (!enContacts1.contains(contact)) enContacts1.add(contact);
            Collections.sort(enContacts1, (o1, o2) -> o1.getNamePinyin().compareTo(o2.getNamePinyin()));

          } catch (OperationApplicationException e) {
            e.printStackTrace();
          } catch (RemoteException e) {
            e.printStackTrace();
          }

2、update

          Uri uri = ContactsContract.Data.CONTENT_URI;
          int count = 0;
          for (Contact contact : contacts) {
//            long id = contact.getId();
//            Uri uri = ContentUris.withAppendedId(args.uri, id);
            ArrayList<ContentProviderOperation> opsUpdates = new ArrayList<>();
            String where = ContactsContract.Data.DISPLAY_NAME + " = ? AND " +
                ContactsContract.Data.MIMETYPE + " = ?";
            //number
            opsUpdates.add(ContentProviderOperation.newUpdate(uri)
                .withSelection(where, new String[]{contact.getName(), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, EnUtils.encryptText(contact.getNumber()))
                .build());

            //email
            opsUpdates.add(ContentProviderOperation.newUpdate(uri)
                .withSelection(where, new String[]{contact.getName(), ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.Email.DATA, EnUtils.encryptText(contact.getEmail()))
                .build());

            //company / position
            opsUpdates.add(ContentProviderOperation.newUpdate(uri)
                .withSelection(where, new String[]{contact.getName(), ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, EnUtils.encryptText(contact.getCompany()))
                .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, EnUtils.encryptText(contact.getPosition()))
                .build());

            //address
            opsUpdates.add(ContentProviderOperation.newUpdate(uri)
                .withSelection(where, new String[]{contact.getName(), ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, EnUtils.encryptText(contact.getAddress()))
                .build());

            //note
            opsUpdates.add(ContentProviderOperation.newUpdate(uri)
                .withSelection(where, new String[]{contact.getName(), ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.Note.NOTE, EnUtils.encryptText(contact.getRemark()))
                .build());

            //name
            opsUpdates.add(ContentProviderOperation.newUpdate(uri)
                .withSelection(where, new String[]{contact.getName(), ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, EnUtils.encryptText(contact.getName()) + EnUtils.CONTACT_PREFIX)
                .build());

            try {
              ContentProviderResult[] applyBatch = resolver.applyBatch(ContactsContract.AUTHORITY, opsUpdates);
              count++;
            } catch (OperationApplicationException e) {
              e.printStackTrace();
              count = -1;
            } catch (RemoteException e) {
              e.printStackTrace();
              count = -1;
            }

3、query

          Contact queryContact = (Contact) args.data;
          long contactId = queryContact.getContactId();
          String email1 = getData1(resolver, contactId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
          String org1 = getOrg(resolver, contactId);
          String address1 = getData1(resolver, contactId, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
          String remark1 = getData1(resolver, contactId, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE);
          queryContact.setEmail(email1);
          if (!StringUtils.isEmpty(org1) && org1.contains(REGEX)) {
            String[] split = org1.split(REGEX);
            queryContact.setCompany(split[0]);
            queryContact.setPosition(split[1]);
          }
          queryContact.setAddress(address1);
          queryContact.setRemark(remark1);


  /**
   * 根据MIMETYPE类型, 返回对应联系人的data1字段的数据
   */
  private String getData1(final ContentResolver resolver, Long contactId, final String mimeType) {
    StringBuilder sb = new StringBuilder();

    Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
        new String[]{ContactsContract.Data.DATA1},
        ContactsContract.Data.CONTACT_ID + "=?" + " AND "
            + ContactsContract.Data.MIMETYPE + "='" + mimeType + "'",
        new String[]{String.valueOf(contactId)}, null);

    if (cursor != null && cursor.getCount() > 0) {
      cursor.moveToFirst();
      sb.append(cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DATA1)));
      cursor.close();
    }
    return sb.toString();
  }

  private String getOrg(final ContentResolver resolver, Long contactId) {
    StringBuilder sb = new StringBuilder();
    String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
    String[] orgWhereParams = new String[]{String.valueOf(contactId), ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
    Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
        null, orgWhere, orgWhereParams, null);
    if (cursor.moveToFirst()) {
      //组织名 (公司名字)
      String company = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
      //职位
      String title = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
      sb.append(company).append(REGEX);
      sb.append(title);
    }
    cursor.close();
    return sb.toString();
  }

4、delete

          ArrayList<ContentProviderOperation> delOps = new ArrayList<>();
          //1 delete contact information such as phone number,email
          delOps.add(ContentProviderOperation
              .newDelete(ContactsContract.Data.CONTENT_URI)
              .withSelection(ContactsContract.RawContacts.CONTACT_ID + " = ?", new String[]{String.valueOf(delContact.getContactId())})
              .build());

          //2 delete contact
          delOps.add(ContentProviderOperation
              .newDelete(ContactsContract.RawContacts.CONTENT_URI)
              .withSelection(ContactsContract.RawContacts.CONTACT_ID + " = ?", new String[]{String.valueOf(delContact.getContactId())})
              .build());

          try {
            args.result = resolver.applyBatch(ContactsContract.AUTHORITY, delOps);
          } catch (OperationApplicationException e) {
            e.printStackTrace();
          } catch (RemoteException e) {
            e.printStackTrace();
          }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值