Android 批量添加联系人

public class ContactTest extends AndroidTestCase {

    public void testRead() {
        ContentResolver resolver = getContext().getContentResolver();
        Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri = Uri.parse("content://com.android.contacts/data");

        // 先查询raw_contacts表,得到联系人id
        Cursor rcCursor = resolver.query(rawContactsUri, new String[] { "_id" }, "contact_id is not null", null, null);
        while (rcCursor.moveToNext()) {
            long id = rcCursor.getLong(0);
            Cursor dataCursor = resolver.query(dataUri, new String[] { "mimetype", "data1" }, "raw_contact_id = ?",
                    new String[] { id + "" }, null);
            while (dataCursor.moveToNext()) {
                String type = dataCursor.getString(0);
                String data = dataCursor.getString(1);
                System.out.println("type:" + type + ",   " + "data: " + data);
            }
        }
    }

    // 插入联系人
    public void testInsertContact() {
        ContentResolver resolver = getContext().getContentResolver();
        // 1.向raw_contacts中插入id
        ContentValues values = new ContentValues();
        Uri url = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri newUri = resolver.insert(url, values);
        long id = ContentUris.parseId(newUri);

        Uri dataUri = Uri.parse("content://com.android.contacts/data");

        // 2.向data中插入数据
        // 插入名字
        values.put("raw_contact_id", id);
        values.put("mimetype", "vnd.android.cursor.item/name");
        values.put("data1", "tom");
        resolver.insert(dataUri, values);
        // 插入email
        values.clear();
        values.put("raw_contact_id", id);
        values.put("mimetype", "vnd.android.cursor.item/email_v2");
        values.put("data1", "tom@tom.com");
        resolver.insert(dataUri, values);
        // 插入phone
        values.clear();
        values.put("raw_contact_id", id);
        values.put("mimetype", "vnd.android.cursor.item/phone_v2");
        values.put("data1", "13578789696");
        resolver.insert(dataUri, values);
        // 插入address
        values.clear();
        values.put("raw_contact_id", id);
        values.put("mimetype", "vnd.android.cursor.item/sip_address");
        values.put("data1", "北京");
        resolver.insert(dataUri, values);
    }

    /**
     * 批量操作,相当于开启事务
     * @throws RemoteException
     * @throws OperationApplicationException
     */
    public void testBatchInsert() throws RemoteException, OperationApplicationException{
        ContentResolver resolver = getContext().getContentResolver();

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

        Uri rawUri = Uri.parse("content://com.android.contacts/raw_contacts");
        ContentProviderOperation operation1 = ContentProviderOperation.newInsert(rawUri).withValue("_id", null).build(); //第零个操作,向raw_contacts中插入id
        Uri dataUri = Uri.parse("content://com.android.contacts/data");
        ContentProviderOperation operation2 = ContentProviderOperation.newInsert(dataUri)
                .withValueBackReference("raw_contact_id", 0) //引用第0个操作的数据
                .withValue("mimetype", "vnd.android.cursor.item/name")
                .withValue("data1", "jack")
                .build();
        ContentProviderOperation operation3 = ContentProviderOperation.newInsert(dataUri)
                .withValueBackReference("raw_contact_id", 0) //引用第0个操作的数据
                .withValue("mimetype", "vnd.android.cursor.item/email_v2")
                .withValue("data1", "jack@tom.com")
                .build();
        ContentProviderOperation operation4 = ContentProviderOperation.newInsert(dataUri)
                .withValueBackReference("raw_contact_id", 0) //引用第0个操作的数据
                .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
                .withValue("data1", "13678967412")
                .build();
        ContentProviderOperation operation5 = ContentProviderOperation.newInsert(dataUri)
                .withValueBackReference("raw_contact_id", 0) //引用第0个操作的数据
                .withValue("mimetype", "vnd.android.cursor.item/sip_address")
                .withValue("data1", "上海")
                .build();

        operations.add(operation1);
        operations.add(operation2);
        operations.add(operation3);
        operations.add(operation4);
        operations.add(operation5);
        String authority = "com.android.contacts";
        resolver.applyBatch(authority, operations);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值