2010-07-12 121 views
3

我正在尝试在Android 2.1中为联系人数据库写入新联系人。不过,我收到以下错误:联系人写入联系人数据库 - Android 2.1

java.lang.UnsupportedOperationException: Aggregate contacts are created automatically. 

我已经加入清单中的以下字段:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 

这是我的代码:

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

String accountType = null; 
String accountName = null; 

Builder builder = ContentProviderOperation.newInsert(
ContactsContract.Contacts.CONTENT_URI); 
builder.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType); 
builder.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName); 

ContentProviderOperation op = builder.build(); 
Log.i("contacts", "op.getUri(): " + op.getUri()); 
ops.add(op); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(
     ContactsContract.Data.RAW_CONTACT_ID, 
     ops.size() 
    ) 
    .withValue(
     ContactsContract.Data.MIMETYPE, 
     StructuredName.CONTENT_ITEM_TYPE 
    ) 
    .withValue(StructuredName.DISPLAY_NAME, contact.getFullName()) 
    .build() 
); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(
     ContactsContract.Data.RAW_CONTACT_ID, 
     ops.size() 
    ) 
    .withValue(
     ContactsContract.Data.MIMETYPE, 
     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE 
    ) 
    .withValue(
     ContactsContract.CommonDataKinds.Phone.NUMBER, 
     contact.getPhoneNumber() 
    ) 
    .build() 
); 

try { 
    this.cr.applyBatch(ContactsContract.AUTHORITY, ops); 
} 

回答

2
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rowContactInsertIndex).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER, cPhone).withValue(Phone.TYPE, cPhoneType).build()); 

这可能帮助您。对全名,电话和电子邮件也一样