2015-04-20 26 views
1

我使用此代码来添加新联系人:如何添加电子邮件到现有用户的Android

ContentResolver mContentResolver = v.getContext().getContentResolver(); 

ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); 

ContentProviderOperation.Builder builder; 
builder = ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI); 
builder.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, account.name); 
builder.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, account.type); 
operationList.add(builder.build()); 

builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); 
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name); 
operationList.add(builder.build()); 

mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); 

的点,之后添加联系人,我怎么可以添加一个电子邮件发送到联系人?

我知道在同一时间插入电子邮件:

builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0); 
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE); 
builder.withValue(ContactsContract.CommonDataKinds.Email.DATA, email); 
builder.withValue(ContactsContract.CommonDataKinds.Email.TYPE,ContactsContract.CommonDataKinds.Email.TYPE_HOME); 
operationList.add(builder.build()); 

回答

0

这是解决方案。您需要raw_contact_id

private void InsertEmail(long raw_contact_id, String email){ 
    ContentValues values = new ContentValues(); 
    values.put(ContactsContract.Data.RAW_CONTACT_ID, raw_contact_id); 
    values.put(ContactsContract.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_HOME); 
    context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); 
} 
0

后创建一个新的联系人,并插入到数据库,保存RAW_CONTACT_ID,那么这个ID下插入一个新的电子邮件。

这是一个例子。

ArrayList<ContentProviderOperation> ops = new ArrayList<>(); 

    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).withValue(
      ContactsContract.RawContacts.ACCOUNT_NAME, "null" 
    ).withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "null").build()); 

    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "test").build()); 

    try { 
     ContentProviderResult[] results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     if (results != null && results.length >= 1) { 
      ops.clear(); 

      ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
        .withValue(ContactsContract.Data.RAW_CONTACT_ID, ContentUris.parseId(results[0].uri)) 
        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
        .withValue(ContactsContract.CommonDataKinds.Email.DATA, "[email protected]").build()); 

      getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
      Log.d(TAG, results[0].uri.toString()); 
     } else { 
      Log.d(TAG, "result is empty"); 
     } 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
     e.printStackTrace(); 
    } 
相关问题