android联系人操作

    xiaoxiao2022-06-26  83

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

     


    最新回复(0)