内容提供者的事务:
private Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts");
private Uri datasUri = Uri.parse("content://com.android.contacts/data");
public void insertContact() {
try {
ArrayList<ContentProviderOperation> list = new ArrayList<ContentProviderOperation>();//所有事务的操作都在这个集合里
ContentProviderOperation operation1 = ContentProviderOperation.newInsert(rawContactsUri).withValue("_id", null).build();
ContentProviderOperation operation2 = ContentProviderOperation.newInsert(datasUri)
.withValueBackReference("raw_contact_id", 0)//把同组第一个操作的结果作为值,因为这4个操作是一个事务,第一个操作还没执行第二个操作又需要用到第一个操作的返回值
.withValue("mimetype", "vnd.android.cursor.item/name")//要添加的内容
.withValue("data1", "皮卡丘")//要添加的内容
.build();
ContentProviderOperation operation3 = ContentProviderOperation.newInsert(datasUri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
.withValue("data1", "15555555555")
.build();
ContentProviderOperation operation4 = ContentProviderOperation.newInsert(datasUri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/email_v2")
.withValue("data1", "888@gmail.com")
.build();
list.add(operation1);
list.add(operation2);
list.add(operation3);
list.add(operation4);
getContentResolver().applyBatch("com.android.contacts", list);//执行事务,添加联系人
Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}